본문 바로가기
Database/Amazon Aurora MySQL

Aurora MySQL DML 복구(Flashback Query)

by DBTechBiz 2022. 8. 30.

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 쿼리를 수동으로 만든다.
반응형

댓글