mysql binary log (binlog) 를 이용한 Flashback Query 복구
▷ MySQL binary log 는 update, insert, delete 등 데이터베이스에 일어나는 업데이트에 관련된 쿼리가 시간과 함께 기록되며, 데이터 복구에 이용할 수 있다.
- binary log 파일 확인
'show master status' 명령어를 통해 현재의 binary log 를 확인한다.
시간 표시가 나오지 않기 때문에 복구 시점이 얼마되지 않은 경우 최신의 binary log 부터 확인을 하고 binary log 파일 확인 또는 복구 하기가 어려운 경우는 Amazon RDS 에서 제공하는 스냅샷 복원 기능을 이용해 복구를 진행한다.
show master status;
# File Position
# mysql-bin-changelog.001279 117,791,049
show binary logs;
# Log_name File_size
# mysql-bin-changelog.001272 134,217,853
# mysql-bin-changelog.001273 134,217,941
# mysql-bin-changelog.001274 134,218,075
# mysql-bin-changelog.001275 134,218,233
# mysql-bin-changelog.001276 134,218,035
# mysql-bin-changelog.001277 134,217,890
# mysql-bin-changelog.001278 134,218,339
# mysql-bin-changelog.001279 117,731,049
- binary log 파일을 Local PC 로 Download
윈도우 기준으로 cmd 창에서 mysqlbinlog 를 이용하여 PC 로 Download 한다.
mysql 을 설치하면 bin 폴더에 mysqlbinlog.exe 파일이 생성된다.
mysqlbinlog ^
--read-from-remote-server ^
--host=aurora-rds-cluster.cluster-clea5sgbwnb0q-ap-northeast-2.rds.amazonaws.com ^
--port=3306 ^
--user admin ^
--password ^
--raw ^
mysql-bin-changelog.001279
- Downlaod 한 binary log 파일을 쿼리 형태로 변환
아래는 변환 방식을 3가지 형태로 표현하였다. 각자의 상황에 맞게 변환을 진행한다.
mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin-changelog.001279 > mysql-bin-changelog.001279.sql
mysqlbinlog -v --base64-output=DECODE-ROWS --start-position=53765052 --stop-position=53766110 mysql-bin-changelog.001279 > mysql-bin-changelog.001279.sql
mysqlbinlog -v --base64-output=DECODE-ROWS --start-datetime="2022-08-22 20:05:00" --stop-datetime="2022-08-22 20:25:00" mysql-bin-changelog.001279 > mysql-bin-changelog.001279.sql
- 추출한 SQL 파일을 이용하여 rollback 쿼리를 수동으로 만듬
추출한 sql 파일은 flashback 을 위한 rollback 쿼리가 아닌 실제 돌아간 쿼리 이므로 (ex. update 문의 경우 to-be 데이터와 as-is 가 조건으로 들어가 있다.) 해당 쿼리를 이용하여 rollback 쿼리를 수동으로 만든다.
반응형
댓글