中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL主從復制出現報錯Errno1205解決方案

發布時間:2020-05-11 10:35:35 來源:億速云 閱讀:363 作者:三月 欄目:MySQL數據庫

文主要給大家介紹MySQL主從復制出現報錯Errno1205解決方案,文章內容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下MySQL主從復制出現報錯Errno1205解決方案吧。

nagios報警如下大致意思就是

14:39分   vip發生了漂移

**** Nagios ***** 

Notification Type: PROBLEM 
Service: check_ha_mysqld 
Host: prod-bjuc-mysql1-vip 
Address: 192.168.87.74 
State: CRITICAL 
Date/Time: Wed Mar 28 14:39:27 CST 2018 
Additional Info: 
CRITICAL: HA Failover from 192.168.87.72 to 192.168.87.123,         
192.168.87.123 result:PROCS OK: 1 processes with command name /usr/sbin/mysqld, 
args  VIP=192.168.87.74, 192.168.87.72:PROCS OK: 1 processes with command name /usr/sbin/mysqld

14:46分主從復制中斷

***** Nagios ***** 

Notification Type: PROBLEM 
Service: check_mysql_health_slave-sql-running 
Host: bjuc-mysql1 
Address: 192.168.87.72 
State: CRITICAL 
Date/Time: Wed Mar 28 14:46:06 CST 2018 
Additional Info: 
CRITICAL - Slave sql is not running

登錄數據庫云服務器查看主從復制的狀態,發現報錯1205錯

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.87.123
                  Master_User: zhu
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000481
          Read_Master_Log_Pos: 218802975
               Relay_Log_File: mysql-relay-bin.000428
                Relay_Log_Pos: 2428110
        Relay_Master_Log_File: mysql-bin.000481
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: performance_schema,information_schema,test,mysql
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: %.%
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1205
                   Last_Error: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)'
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 182088298
              Relay_Log_Space: 39142986
              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: 1205
Last_SQL_Error: Error 'Lock wait timeout exceeded; try restarting transaction' on query. 
Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)'
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 6
1 row in set (0.00 sec)

查看錯誤日志有一下報錯信息:

錯誤日志中給出了報錯原因和解決方法

tail -70 error.log

180328 14:36:05 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:36:21 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:36:38 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:36:56 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:37:15 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:37:35 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:37:56 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:38:17 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:38:38 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:38:59 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:39:20 [ERROR] Slave SQL: Error 'Lock wait timeout exceeded; try restarting transaction' on query. Default database: 'statusnet'. Query: 'UPDATE notice_status_new set valid = 0 WHERE conversation = 384667 AND user_id IN(4337475,4337529,4337471,4337365)', Error_code: 1205
180328 14:39:20 [ERROR] Slave SQL thread retried transaction 10 time(s) in vain, giving up. Consider raising the value of the slave_transaction_retries variable.
180328 14:39:20 [Warning] Slave: Lock wait timeout exceeded; try restarting transaction Error_code: 1205
180328 14:39:20 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000481' position 182088298

查看參數結合著兩個參數可以知道主從復制報錯的原因為:

180328 14:39:20 [ERROR] Slave SQL thread retried transaction 10 time(s) in vain, giving up. Consider raising the value of the slave_transaction_retries variable.

180328 14:39:20 [Warning] Slave: Lock wait timeout exceeded; try restarting transaction Error_code: 1205

180328 14:39:20 [ERROR] Error running query, slave SQL thread aborted,Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000481' position 182088298

因為表notice_status_new產生了鎖,阻塞了這條update語句

參數innodb_lock_wait_time 設置的為15秒,單個事務在等待15秒后開始報1025錯:因為鎖執行超時并重啟事務

參數slave_transaction_retries 設置的為10次,如果事務重試次數超過10次,復制中斷。(但是錯誤日志中嘗試了11次)

mysql> show variables like '%innodb_lock_wait_timeout%';

+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 15    |
+--------------------------+-------+
1 row in set (0.01 sec)

mysql> show variables like '%slave_transaction_retries%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| slave_transaction_retries | 10    |
+---------------------------+-------+
1 row in set (0.00 sec)

解決方法:重啟slave后主從復制恢復,并開始追日志

mysql> stop slave;
Query OK, 0 rows affected (0.02 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
           
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
      
1 row in set (0.00 sec)

vip的問題等到晚上在切回來,

---------------------------------我是分割線--------------------------

這次問題雖然解決了,但是發現問題我們一定要找到根音,這樣問題才能算是閉環。

為什么會產生這個鎖呢,因為記錄鎖信息的表都是實時的,現在查不出當時的鎖信息,但是從存儲引擎的運行狀態中還是能發現一些問題,數據庫出現了死鎖!!顯然在update這張表一定會等待的!!

發現了一條奇葩SQL,被鎖的那張表也是notice_status_new

UPDATE notice_status_new SET count = count + 1, push_count = push_count + 1 WHERE conversation = 2609759 AND user_id != 7384662 AND user_id IN(7359498)

show engine innodb status\G 
截取死鎖的這部分
------------------------
LATEST DETECTED DEADLOCK
------------------------
180328 14:33:52
*** (1) TRANSACTION:
TRANSACTION 1B285E9F9, ACTIVE 0 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1248, 3 row lock(s), undo log entries 1
MySQL thread id 3972036, OS thread handle 0x7fc0c3464700, query id 2525495433 192.168.87.42 dstatusnet Updating
UPDATE notice_status_new SET count = count + 1, push_count = push_count + 1 WHERE conversation = 2609759 AND user_id != 7384662 AND user_id IN(7359498)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 3535 page no 65360 n bits 448 index `conv_user` of table `statusnet`.`notice_status_new` trx id 1B285E9F9 lock_mode X locks rec but not gap waiting
Record lock, heap no 241 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 8; hex 000000000027d25f; asc      ' _;;
 1: len 4; hex 80704c0a; asc  pL ;;
 2: len 4; hex 80b1a0fe; asc     ;;

*** (2) TRANSACTION:
TRANSACTION 1B285E9FD, ACTIVE 0 sec starting index read, thread declared inside InnoDB 500
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1248, 3 row lock(s), undo log entries 1
MySQL thread id 3867908, OS thread handle 0x7fbfc6d4f700, query id 2525495437 192.168.87.42 dstatusnet Updating
UPDATE notice_status_new SET count = count + 1, push_count = push_count + 1 WHERE conversation = 2609759 AND user_id != 7359498 AND user_id IN(7384662)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 3535 page no 65360 n bits 448 index `conv_user` of table `statusnet`.`notice_status_new` trx id 1B285E9FD lock_mode X locks rec but not gap
Record lock, heap no 241 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 8; hex 000000000027d25f; asc      ' _;;
 1: len 4; hex 80704c0a; asc  pL ;;
 2: len 4; hex 80b1a0fe; asc     ;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 3535 page no 65360 n bits 448 index `conv_user` of table `statusnet`.`notice_status_new` trx id 1B285E9FD lock_mode X locks rec but not gap waiting
Record lock, heap no 242 PHYSICAL RECORD: n_fields 3; compact format; info bits 0
 0: len 8; hex 000000000027d25f; asc      ' _;;
 1: len 4; hex 8070ae56; asc  p V;;
 2: len 4; hex 80b1a0fc; asc     ;;

*** WE ROLL BACK TRANSACTION (2)

問題找到了,找對該業務的開發,溝通后決定在周六上線新版本,徹底解決問題。


可以寫一個實時監控鎖的腳本,把內容輸出打印,這樣方便以后定位問題!


-----------------------------------------------

后面想了想可能是由于vip漂移導致的主從復制報錯

線上架構為MM+heartbeat

vip漂移的原因待定,vip漂移后,數據庫開始在192.168.87.123云服務器上寫入數據庫,72數據庫作為備份庫,但是還會同步123數據庫的數據,由于192.168.87.72數據庫表notice_status_new還存在死鎖,所以在slave SQL thread應用來自123云服務器的中繼日志時,執行到該SQL時,發生了鎖等待,等待15秒后超時并重新嘗試該事務,嘗試10后,還是在鎖表狀態,slave SQL thread 線程停止工作,主從同步中斷。

----------------------------------------

3月29日和開發復盤

因為報警時間不是很準確,實際時間還是以heartbeat日志和mysql日志為準,通過查看日志確定是heartbeat首先發生漂移,然后才是主從復制報錯

主要是討論的問題有兩個

  Heartbeat為什么會發生漂移

MySQL主從復制出現報錯Errno1205解決方案

通過查看heartbeat日志,72和123存在心跳檢測,在72ping123的時候發生了丟包,

在123ping72的時候正常,72節點以為自己死掉?在14:35:26發生vip漂移,從72漂移到123。

Mar 28 14:35:26 bjuc-mysql1 pengine: [14176]: notice: LogActions: Move    VIP_192_168_87_74  (Started bjuc-mysql1 -> prod-uc-yewu-db-slave2)

  為什么會出現死鎖

MySQL主從復制出現報錯Errno1205解決方案

從存儲引擎的運行狀態中查看,如果這兩條SQL的請求同時到達數據庫,因為innodb支持到行鎖的粒度,第二條SQL會鎖住很多行,如果和第一條SQL中鎖住有重復的,就會發生相互等待的狀況,所以出現死鎖。

這兩條SQL的where條件如下:

user_id IN(6032694,5824664,4344233,5450840,6032678,4951596,6032668,4344453,6038786,4344347,6032676,5754768);  
user_id != 6185996
 
這兩個條件可能發生邏輯上的沖突,然后導致死鎖

看完以上關于MySQL主從復制出現報錯Errno1205解決方案,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業知識信息 ,可以持續關注我們的行業資訊欄目的。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岗巴县| 宁阳县| 巢湖市| 昌黎县| 东海县| 崇礼县| 罗城| 宁强县| 枣阳市| 肥西县| 呼和浩特市| 颍上县| 荔波县| 富裕县| 鄢陵县| 永昌县| 台前县| 白朗县| 独山县| 丁青县| 康乐县| 轮台县| 滦平县| 武乡县| 通道| 黔南| 南通市| 塘沽区| 墨脱县| 靖西县| 绥滨县| 莎车县| 若尔盖县| 全南县| 霍林郭勒市| 邯郸市| 崇州市| 巴林右旗| 博客| 盐津县| 大名县|