Mysql 주종 또는 주보 1062 오류 해결

5554 단어 Mysql고장 처리
1062 오류-메인 키 충돌, 이런 상황이 발생하면 라이브러리에서 삽입 작업이 발생하고 메인 라이브러리에서 같은 데이터를 삽입하는 것이다.iothread는 문제가 없다. sqlthread 오류 처리 이런 오류는 일반적으로 두 가지 사고방식이 있다. 첫째, 오류 실행 문장을 직접 건너뛰고 오류 실행 문장을 찾아 메인 라이브러리 2 데이터를 복원한다.
문 건너뛰기 동작은 다음과 같습니다. 1062 오류 프롬프트는 다음과 같습니다.
     Last_Errno: 1062
     Last_Error: Could not execute Write_rows event on table test.test; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql2-bin.000001, end_log_pos 2799
     Skip_Counter: 0

- 기존 모델
mysql> stop slave;
#        ,       ,(  N event,      )
mysql> set global sql_slave_skip_counter =1;
mysql> start slave;
    mysql> show slave status/G   :
mysql> show slave status/G;/
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.21
                  Master_User: rep1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql2-bin.000001
          Read_Master_Log_Pos: 3087
               Relay_Log_File: cndba-relay-bin.000006
                Relay_Log_Pos: 587
        Relay_Master_Log_File: mysql2-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: test
#          1062  
  my.cnf  , Replication settings   :
  slave-skip-errors = 1062
      ,  start salve。
  :        ,   ,        。

1062 장면 시뮬레이션:
홈 라이브러리 1 작성 테이블
mysql> create table test(id int PRIMARY KEY ,name varchar(32));
Query OK, 0 rows affected (0.06 sec)
    sql_log_bin    1        2
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values (1,'aa');
Query OK, 1 row affected (0.02 sec)
mysql> insert into test values (2,'bb');
Query OK, 1 row affected (0.01 sec)
mysql> insert into test values (3,'dd');
Query OK, 1 row affected (0.00 sec)
    sql_log_bin    1        2
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values (4,'cc');
Query OK, 1 row affected (0.08 sec)
mysql> select * from test; 
+----+------+
| id | name |
+----+------+
|  1 | aa   |
|  2 | bb   |
|  3 | dd   |
|  4 | cc   |
+----+------+
4 rows in set (0.00 sec)

홈 라이브러리 2 데이터 동기화 보기 홈 라이브러리 2 데이터 동기화 보기
      2          
mysql> select * from test; 
+----+------+
| id | name |
+----+------+
|  4 | cc   |
+----+------+
1 row in set (0.00 sec)

홈 라이브러리 2에 표 테스트 삽입
mysql> insert into test values (2,'bb');
Query OK, 1 row affected (0.01 sec)

홈 라이브러리 1에서 주종 상태 보기
   1062  ,              1    id=2   ,      。
mysql> show slave status/G;
......
                   Last_Errno: 1062
                   Last_Error: Could not execute Write_rows event on table test.test; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql2-bin.000001, end_log_pos 2799
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2564
              Relay_Log_Space: 1541
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1062
               Last_SQL_Error: Could not execute Write_rows event on table test.test; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql2-bin.000001, end_log_pos 2799
......

근본적인 해결 방법:
  Last_Error    master log end_log_pos         2      
  2  :
[root@cndba data]# mysqlbinlog --no-defaults -v --base64-output=decode-rows  --stop-position=2799 /data/mysql/binlog/mysql2-bin.000001 | tail -20
#180819 10:59:56 server id 21  end_log_pos 2706 CRC32 0x5a43437b     Query    thread_id=6    exec_time=0    error_code=0
SET TIMESTAMP=1534647596/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=2, @@session.auto_increment_offset=2/*!*/;
BEGIN
/*!*/;
# at 2706
#180819 10:59:56 server id 21  end_log_pos 2756 CRC32 0x0d6a3132     Table_map: `test`.`test` mapped to number 229
# at 2756
#180819 10:59:56 server id 21  end_log_pos 2799 CRC32 0xc6a8a0b0     Write_rows: table id 229 flags: STMT_END_F
### INSERT INTO `test`.`test`
### SET
###   @1=2
###   @2='bb'
ROLLBACK /* added by mysqlbinlog */ /*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    ,     delete   
  1      :
mysql> delete from test where id=2;
Query OK, 1 row affected (0.02 sec)
    
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
    2  :
mysql> show slave status/G;
......
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
......

삽입된 데이터와 라이브러리의 데이터가 같은지 확인하십시오. 만약 같으면 메인 라이브러리 1의 데이터를 삭제해서 해결할 수 있습니다. 그렇지 않으면 이 사건을 뛰어넘어 해결할 수 있습니다.

좋은 웹페이지 즐겨찾기