기간을 지정해서 백업하고 중복 에러 없이 복구하기

시간 필드를 사용해서 특정기간 범위의 자료만 백업하는 방법,
그리고 백업된 파일로 중복된 primary key를 피하면서 복구하는 명령어


* 기간을 지정해서 백업
     --skip-tz-utc 옵션이 있어야 현재 시간대로 제대로 검색됨, 기본은 UTC, 복구는 옵션과 관계없이 원래 값으로 복구됨
     --skip-add-drop-table  : 백업 파일에 DROP TABLE 명령 추가하지 않기
> mysqldump -u username  --password=[password] db_name  table_name  --skip-add-drop-table  --skip-tz-utc  --where="updated_at >= '2024-01-01 00:00:00' AND updated_at < '2024-02-01 00:00:00'" > backup.sql

//-------------------------------------
복구 >

*  없는 record는 추가, primary key 키가 같은데 변경된 것은 덮어쓰기
    - 파일 수정 : INSERT INTO => REPLACE INTO
> "C:\Program Files\Git\usr\bin\sed" "s/^INSERT INTO/REPLACE INTO" backup.sql > backup-fix.sql

> mysql -u [username] --password=[password]  [database_name] --show-warnings  --default-character-set=utf8mb4   --force < backup-fix.sql



없는 것만 추가, (변경된 것은 불변)
     - INSERT INTO => INSERT IGNORE INTO 로 변경 

반응형
Posted by codens