7.5.2 이벤트의 위치를 사용한 시점 복구
날짜와 시간을 지정하는 대신 로그 위치를 지정하기 위해 mysqlbinlog에서 --start-position
과 --stop-position
옵션을 사용할 수 있습니다. 그들은 날짜가 아닌 로그 위치 번호를 지정하는 것을 제외하고 시작 날짜와 종료 날짜 옵션과 동일하게 작동합니다. 위치를 사용하는 것으로, 특히 해를 끼칠 SQL 문과 비슷한시기에 많은 트랜잭션이 발생하는 경우 복구 할 로그 부분을보다 정확하게 파악할 수 있습니다. 위치 번호를 확인하려면 예기치 않은 트랜잭션이 실행 된 시간 부근의 기간에 mysqlbinlog를 수행하지만 결과를 조사를 위해 텍스트 파일로 리디렉션합니다. 이것은 다음과 같이 실행할 수 있습니다.
shell>mysqlbinlog --start-datetime="2005-04-20 9:55:00" \
--stop-datetime="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
이 명령은 /tmp
디렉토리에 유해한 SQL 문이 실행 된 시간 부근의 SQL 문을 포함하는 작은 텍스트 파일을 만듭니다. 텍스트 편집기에서 파일을 열고 반복하고 싶지 않은 문을 찾습니다. 복구를 중지하고 다시 바이너리 로그의 위치를 확인하고이를 기록합니다. 위치는 뒤에 번호가 붙은 log_pos
레이블이됩니다. 이전 백업 파일 복원 후 위치 번호를 사용하여 바이너리 로그 파일을 처리합니다. 예를 들어,이 같은 명령을 사용합니다.
shell>mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 \
| mysql -u root -p
shell>mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 \
| mysql -u root -p
첫 번째 명령은 지정된 정지 위치까지 모든 트랜잭션을 복구합니다. 두 번째 명령은 바이너리 로그의 마지막까지 지정된 시작 위치에서 모든 트랜잭션을 복구합니다. mysqlbinlog의 출력은 각 SQL 명령문이 기록되기 전에 SET TIMESTAMP
명령문이 포함되므로 복구 된 데이터와 관련된 MySQL 로그는 트랜잭션이 실행 된 원래 시간을 반영합니다.