이번에 회사에서 DB 서버를 AWS RDS로 단계적으로 이전하던 도중에 프로덕션 데이터가 소실되는 상황이 발생하였고 다행히 바이너리 로그를 보관하는 기간안이어서 MySQL 바이너리 로그로 복구를 하였는데 이때 학승하였던것을 기록차 남긴다.
- 프로덕션에서 Binlog 있는지 확인
SHOW BINARY LOGS;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000015 | 724935 |
| binlog.000016 | 733481 |
+---------------+-----------+
- Binlog 덤프진행
mysqlbinlog --read-from-remote-server --host=<프로덕션호스트> --raw binlog.000001 -u<계정> -p
- Binlog 에서 INSERT 및 UPDATE 추출하기 위해 파일 파싱
mysqlbinlog binlog.000001 -d <DB명> --base64-output=AUTO --verbose >> output.txt - 분석 및 SQL 문으로 수기로 변환하고 INSERT 와 UPDATE 실행
다음에 진행한다면 다르게 했을것
- 추후에는 같은 이슈 발생시 GitHub - danfengcao/binlog2sql: Parse MySQL binlog to SQL you want 사용가능해보인다. DDL 과 DML 쿼리문을 바로 사용할수 있게 파싱해서 사용해준다
- Binlog 를 사실 Point-in-time recovery 로 binlog를 바로 사용하고 시간대를 지정하여 지원하는데 복구가 가능한데 수동으로 쿼리문을 파싱하지 않아도 복구가 가능하다