기간을 지정해서 백업하고 중복 에러 없이 복구하기
기간을 지정해서 백업하고 중복 에러 없이 복구하기
시간 필드를 사용해서 특정기간 범위의 자료만 백업하는 방법,
그리고 백업된 파일로 중복된 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 로 변경