作者:侯曉陽
愛可生 DBA 團(tuán)隊(duì)成員,主要負(fù)責(zé) MySQL 故障處理和 SQL 審核優(yōu)化。對(duì)技術(shù)執(zhí)著,為客戶負(fù)責(zé)。
本文來源:原創(chuàng)投稿
*愛可生開源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請(qǐng)聯(lián)系小編并注明來源。
問題背景
MySQL 從庫報(bào)錯(cuò)如下:
錯(cuò)誤信息如下:
...
Last_Errno:1317
Last_Error:Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'a838ba08-c009-11e9-85e1-fa163ea2992d:31622919405' at master log master-bin.005599, end_log_pos 2297. See error log and/or performance_schema.replication_Applier_status_by_worker table for more details about this failure or others, if any.
...
Last_SQL_Errno:1317
Last_SQL_Error:Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'a838ba08-c009-11e9-85e1-fa163ea2992d:31622919405' at master log master-bin.005599, end_log_pos 2297. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
排查方式
1.首先我們先通過 performance_schema 查看一下造成報(bào)錯(cuò)的原因
mysql> select * from performance_schema.replication_applier_status_by_worker;
從這里報(bào)錯(cuò)看到,某條語句在回放的時(shí)候查詢執(zhí)行被中斷了。
2.然后我們?cè)俨榭?MySQL 的 error-log
日志中也提示了我們,因?yàn)楣ぷ骶€程被斷開,查詢中斷,它在當(dāng)前這個(gè)位置點(diǎn)停止了,如果想要恢復(fù)重新啟動(dòng)主從即可。
3.嘗試重新啟動(dòng)主從
mysql> stop slave;
mysql> start slave;
重啟復(fù)制通道后,復(fù)制確實(shí)正常了,接下來需要知道為什么查詢被中斷了。
4.帶著疑問,去看了下在報(bào)錯(cuò)的這個(gè)時(shí)間里 MySQL 或是服務(wù)器做了什么,然后發(fā)現(xiàn)了這個(gè)時(shí)間 MySQL 在做備份,之后查看 xtrabackup 備份參數(shù)是帶著 --kill-long-queries-timeout=60 和 --kill-long-query-type=all。
簡單來說就是,當(dāng) --kill-long-query-type=all,--kill-long-queries-timeout=60,從開始執(zhí)行 FLUSH TABLES WITH READ LOCK 到 kill 掉阻塞它的這些查詢之間等待的秒數(shù)為 60 秒,默認(rèn)值為 0,不會(huì) kill 任何查詢,使用這個(gè)選項(xiàng) xtrabackup 需要有 Process 和 super 權(quán)限。
5.然后查看 xtrabackup 的備份日志,一切答案見了分曉