이번에 회사에서 DB 서버를 AWS RDS로 단계적으로 이전하던 도중에 프로덕션 데이터가 소실되는 상황이 발생하였고 다행히 바이너리 로그를 보관하는 기간안이어서 MySQL 바이너리 로그로 복구를 하였는데 이때 학승하였던것을 기록차 남긴다.

  1. 프로덕션에서 Binlog 있는지 확인
SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000015 |    724935 |
| binlog.000016 |    733481 |
+---------------+-----------+
  1. Binlog 덤프진행
    mysqlbinlog --read-from-remote-server --host=<프로덕션호스트> --raw binlog.000001 -u<계정> -p
  2. Binlog 에서 INSERT 및 UPDATE 추출하기 위해 파일 파싱
    mysqlbinlog binlog.000001 -d <DB명> --base64-output=AUTO --verbose >> output.txt
  3. 분석 및 SQL 문으로 수기로 변환하고 INSERT 와 UPDATE 실행

다음에 진행한다면 다르게 했을것

  1. 추후에는 같은 이슈 발생시 GitHub - danfengcao/binlog2sql: Parse MySQL binlog to SQL you want 사용가능해보인다. DDL 과 DML 쿼리문을 바로 사용할수 있게 파싱해서 사용해준다
  2. Binlog 를 사실 Point-in-time recovery 로 binlog를 바로 사용하고 시간대를 지정하여 지원하는데 복구가 가능한데 수동으로 쿼리문을 파싱하지 않아도 복구가 가능하다

복구 진행시 참조글

  1. https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html
  2. Accessing MySQL binary logs - Amazon Relational Database Service
  3. https://www.percona.com/blog/binlog2sql-binlog-to-raw-sql-conversion-and-point-in-time-recovery/

+ Recent posts