2016-10-15 25 views
0

AWS RDS에서 MySQL을 실행 중입니다. 다음 오류로 인해 슬레이브 복제가 중단됩니다. 그것은 슬레이브 서버의 테이블에서 레코드를 찾을 수 없다고합니다 ... 거기에 어떤 레코드를 알 수있는 방법이 있습니까? 또는 실패한 SQL!MySQL 슬레이브 복제 실패 : 실패의 원인이되는 SQL을 식별하는 방법

Read Replica Replication Error - SQLError: 1032, reason: Could not execute Update_rows_v1 event on table customers.visitor; Can't find record in 'visitor', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin-changelog.206572, end_log_pos 12627388

답변

1

로그를 읽는 데 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를 눌러 종료합니다.