로그를 읽는 데 mysqlbinlog
을 사용하십시오. 에러 메시지로부터
mysqlbinlog --verbose --base64-output=decode-rows mysql-bin-changelog.206572 \
| awk '/end_log_pos/{flag=0}/end_log_pos\ 12627388\ /{flag=1}flag'
,이 행 포맷으로 기록 된 이벤트 같다 그래서
mysqlbinlog
는 서적 위치,이 같은 각 항목을 보여 의사 SQL로 디코딩한다 :
### UPDATE `my_db_name`.`my_table_name`
### WHERE
### @1=70
### @2=1476602910
### @3=NULL
### @4=NULL
### @5=NULL
### @6=NULL
### @7=NULL
### SET
### @1=70
### @2=1476602910
### @3=1476602926
### @4=000000016.283000000
### @5=NULL
### @6='0'
### @7=NULL
출력에있는 @1
, @2
등은 열 1, 열 2 등입니다. binlog는 열의 실제 이름을 포함하지 않습니다. 왜냐하면 이들은 마스터와 슬레이브에서 동일하고 따라서 중복됩니다 ... 그래서 mysqlbinlog
이 의사 - SQL을 내가 어떻게 설명하기 위해 만듭니다. 로깅 된 변경 이벤트를 해석합니다. WHERE
은 업데이트 전에 마스터에 나타난 행의 버전이며 (이것은 슬레이브에서 찾을 수없는 행이 될 것입니다), SET
은 마스터에서 업데이트 한 후의 행의 값입니다. 노예가 존재한다면 행상을 바꿔 놓아야한다).
원본 쿼리를 식별하지는 않지만 마스터에 있지만 행 아웃에없는 실제 행을 보여줍니다. 이미 로그가없는 경우
, 당신이 함께, 먼저 마스터에서 그것을 가져올 수 :
mysqlbinlog --host=xxxx.rds.aws-regi-on.amazonaws.com --user 'rds-master-user' \
--password='rds-master-password' --read-from-remote-server \
--raw mysql-bin-changelog.206572
로그 마스터로부터 꺼낼 수있다. 이 경우에는 슬레이브에서 가져올 수 없습니다. (RDS가 아닌 경우 SSH를 통해 쉘에 로그인하여 슬레이브에 연결하고 릴레이 로그를 직접 읽을 수는 있지만 외부에서 액세스 할 수는 없습니다. 따라서 로그의 마스터로 이동해야합니다.)
기술적으로 필요한 것보다 오래 binlogs를 보관하도록 RDS를 구성하지 않은 경우 다음 번까지 로그가 더 이상 마스터에서 사용할 수 없으므로 운이 좋지 않을 수 있습니다. MySQL 5.6 이상의 모든 RDS 인스턴스에 포함 된 사용자 정의 프로 시저를 사용하여 RDS에서 binlog 보존을 구성 할 수 있습니다. 예를 들어, 24 시간 로그 보존을 설정하려면 다음
CALL mysql.rds_set_configuration('binlog retention hours', 24);
두 패턴 사이의 라인을 찾기 위해 awk
를 사용하기위한 영감의 source에도 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html
신용을 참조하십시오.
위의 명령을 실행 한 후 오류가 발생하는 이벤트가 인쇄 된 후 awk
이 파일 끝까지 스캔을 계속하기 때문에 응답이 중지 된 것처럼 보일 수 있습니다. Ctrl-C를 눌러 종료합니다.