1. 程式人生 > >MySQL 主從同步中斷常見問題

MySQL 主從同步中斷常見問題

event config update ren ons lec myisam cor rac

Error_code: 1032
【現象】
  Last_Error: Could not execute Update_rows event on table kebao.t1; Can‘t find record in ‘t1‘, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event‘s master log mysql-bin.000014, end_log_pos 114166

  140719 23:01:04 [ERROR] Slave SQL: Could not execute Delete_rows event on table zhumh.t; Can‘t find record in ‘t‘, Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event‘s master log mysql-bin.000004, end_log_pos 2359, Error_code: 1032

【原因】
  在主庫為row或mixed模式下,從庫數據不一致導致的SQL線程中斷
【解決】
  1.到主庫上查看event在執行什麽更新,把數據查出來
  2.到從庫上看這條數據是否存在,修復。
【如何避免】
  1.可能導致主從不一致的SQL
  2.不使用--binlog-ignore-db和--replicate-ignore-db
  3.不適用trigger

Error_code: 1062

【現象】

  Last_Error: Query caused different errors on master and slave. Error on master: ‘Deadlock found when trying to get lock; try restarting transaction‘ (1213), Error on slave: ‘Duplicate entry ‘176484282‘ for key 1‘ (1062). Default database: ‘XXXXX‘. Query:   ‘INSERT INTO t1(id,cust_id,in_ucid,confrim_time)
SELECT csl.id,csl.cust_id,csl.in_ucid,csl.add_time
FROM tl_cust_stat_log csl, cust cust
WHERE csl.add_time > NAME_CONST(‘stat_start_date‘,_utf8 0x323031342D30342D31392031373A33303A3030) AND csl.add_time <= NAME_CONST(‘stat_end_date‘,_utf8 0x323031342D30342D32312031373A33303A3030)
AND (csl.cur_stat_2 = ‘0609‘ AND csl.opt_code = ‘CBSA‘) AND csl.cust_id = cust.id AND cust.posid = NAME_CONST(‘posIdVar‘,34094)‘
【原因】
  主庫執行這條insert myISAM表 select from innodb表 對from的表加S鎖,和另一個update語句死鎖,導致這個insert..select被回滾。
  但是insert 的myiSAM表沒有被回滾,因此記入了binlog,在從庫上執行導致duplicate key1062
【解決辦法】
  1.確保更新語句中與從庫一致
    stop slave;
    set global sql_slave_skip_counter=1;
    start slave;
  2.若不一致,則從庫刪掉相應數據,重新執行event。

    my.cnf 設置,一直後在修改
    slave-skip-errors = 1062(用於修復主從)

Error_code: 1053

【現象】
  140524 9:48:36 [ERROR] Slave: Error ‘Server shutdown in progress‘ on query. Default database: ‘crm_sale‘. Query: ‘load data INFILE ‘/home/mysql/mysql/tmp/SQL_LOAD-3367957599-1103609990-72.data‘ IGNORE INTO table XXX character set utf8‘,   Error_code: 1053

【原因】
  mysql-5535,mysql-5615之前,都有這個bug,顯式的kill查詢時候會導致1053:server shutdown progress錯誤,並中斷SQL線程。

【解決辦法】
  直接start slave;

Error_code: 1236

【現象】
  Error: 1236 SQLSTATE: HY000 (ER_MASTER_FATAL_ERROR_READING_BINLOG)
  Message: Got fatal error %d from master when reading data from binary log: ‘%s‘
【原因】
  從庫還未執行binlog,主庫已經超過expire_log_days自動刪除了binlog
【處理】
  1.若漏掉寫入,則找到binlog備份,執行增量
  2.若無寫入,則重新change master到主庫上第一個binlog的第一個點

Error_code: 1298

【現象】

  2014-12-31 07:25:01 32135 [Warning] Slave: Unknown or incorrect time zone: ‘UTC‘ Error_code: 1298
  2014-12-31 07:30:31 32219 [ERROR] Slave SQL: Error ‘Unknown or incorrect time zone: ‘UTC‘‘ on query. Default database: ‘configuration‘. Query: ‘BEGIN‘, Error_code: 1298

【處理】
  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot -proot1 -S /mysqldata/socket/mysql.sock_dsp3609 mysql

  --timezone 是mysqld_safe的參數

  [mysqld_safe]
  timezone = GMT

  驗證:

  SELECT @@global.time_zone, @@session.time_zone;

MySQL 主從同步中斷常見問題