国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

操作解析:MySQL如何查看復制信息并排查問題(上)

開發 開發工具
本文梳理了UCloud在運維本公司MySQL高可用產品UDB過程中遇到的復制問題,并總結了當復制發生異常時,排查復制異常的方法。

“復制”作為MySQL原生的數據同步功能,在MySQL高可用架構中起著至關重要的作用。本文梳理了UCloud在運維本公司MySQL高可用產品UDB過程中遇到的復制問題,并總結了當復制發生異常時,排查復制異常的方法。

MySQL

一、錯誤排查

1. 收集復制信息

在復制發生異常時,首先要分別收集與復制、錯誤相關的信息,主要通過以下手段進行。

1.1 查看show slave status

執行命令“show slave status”查看復制相關信息,主要關注幾條信息:

  1. Master_Log_File: MySQL-bin.000063 
  2. Read_Master_Log_Pos: 282657539 

IO線程讀取到主庫的binlog文件名和該binlog中的位置。這兩個字段代表復制過程中binlog由主庫傳輸到備庫的進度。

  1. Relay_Log_File: MySQL-relay.000002 
  2. Relay_Log_Pos: 313885 

SQL線程執行到relay log文件名和該relay log中的位置。

  1. Relay_Master_Log_File: MySQL-bin.000002 
  2. Exec_Master_Log_Pos: 316585 

SQL線程執行到relay log對應主庫中的binlog文件名和該binlog的位置。

這四個字段代表復制過程中,主庫數據在備庫上重放的進度。

  1. Slave_IO_Running: Yes 
  2. Slave_SQL_Running: No 

當前發生問題的是哪個線程?IO線程或者是SQL線程。

  1. Retrieved_Gtid_Set: ed7c5ee4-762d-11e6-ab9e-6c92bf24c36a:14-3920163 
  2. Executed_Gtid_Set: 04ffb4f5-762e-11e6-81e4-6c92bf26c5c2:1 

這兩個字段在開啟GTID后才有意義。分別代表IO線程接收到binlog中的事務對應的GTID和SQL線程執行過的事務對應的GTID。

這里的GTID不會因為復制而發生改變,即主庫GTID對應的事務一定是主庫執行過之后,通過復制發送過來的。備庫GTID對應的事務一定是備庫執行的。

  1. Last_Errno/Last_IO_Errno/Last_SQL_Errno 
  2. Laset_Error/Last_IO_Error/Last_SQL_Error 

IO/SQL線程發生錯誤的相關描述

1.2 查看錯誤日志

錯誤日志記錄了mysqld發生的錯誤信息,即復制的錯誤信息,同時也會記錄復制開始和停止的相關信息,記錄位置可以通過如下方式查看:

查看錯誤日志

在error log中,主要關注如下信息。

(1) 開始復制(start slave)

從庫啟動復制時,error log中會記錄復制起始位置,包括IO線程讀取主庫端binlog的起始位置和SQL線程執行的relay log起始位置。同時,error log還會記錄開始復制的具體時間。

  1. 2017-04-17T14:47:19.691088Z 7 [Note] Slave I/O thread for channel '': connected to master  
  2. 'repl@192.168.150.21:30001',replication started in log  
  3. 'binlog001.000002' at position 194 
  4. 2017-04-17T14:47:19.693377Z 8 [Note] Slave SQL thread for channel '' initialized, starting replication in log  
  5. 'binlog001.000002' at position 194, relay log  
  6. './relaylog002.000217' position: 407 

(2) 停止復制(stop slave)

從庫停止復制時,error log會記錄IO線程停止時讀取到的主庫binlog的位置,以及停止復制的時間。

  1. 2017-04-18T03:05:52.920750Z 14 [Note] Error reading relay log event for channel '': slave SQL thread was killed2017-04-18T03:05:52.922007Z 13 [Note] Slave I/O thread killed while reading event for channel ''2017-04-18T03:05:52.922041Z 13 [Note] Slave I/O thread exiting for channel '', read up to log 'binlog001.000002', position 443 

(3) 復制錯誤信息

復制錯誤信息的描述會在show slave status的last_error中展現,但如果錯誤信息較長(尤其是在多線程復制的情況下),show slave status并不能完全顯示錯誤的全部信息,需要查看錯誤日志才能查看到完整的錯誤信息。比如:

  1. Last_Errno: 1007 
  2. Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 0 failed executing transaction '0c1b77a7-c113-11e6-9bd6-d4ae52a34783:4' at master log binlog001.000002, end_log_pos 605. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any. 
  3. Skip_Counter: 0 

上述錯誤信息并不是一個完整的錯誤信息描述,不過可以在error log中看到更完整的信息描述以及發生錯誤的時間。

  1. 2017-04-18T03:19:00.037806Z 23 [ERROR] Slave SQL for channel '': Worker 0 failed executing transaction '0c1b77a7-c113-11e6-9bd6-d4ae52a34783:4' at master log binlog001.000002, end_log_pos 605; Error 'Can't create database 'mydb3'; database exists' on query. Default database: 'mydb3'. Query: 'create database mydb3', Error_code: 1007 

1.3 查看二進制日志文件

這里的二進制日志文件包括主庫的binlog和從庫的relay log、binlog。

  • 主庫的binlog是指主庫執行過事務記錄的binlog日志。
  • 從庫的relay log是指從庫接收到主庫的binlog日志。
  • 從庫的binlog是指從庫SQL線程復現relay log后記錄的日志(log-slave-updates開啟),以及從庫執行過的事務記錄的binlog日志。

二進制日志文件中記錄的日志是以event為單位進行,比如一個DML語句通常由4-5個event組成,一個DDL語句通常由2個event組成。

二進制日志文件可以通過命令“show binlog events”或者工具MySQLbinlog來將binlog日志轉換為可識別的格式。

show binlog events格式如下:

上圖顯示的是ROW格式binlog中記錄的內容,其中包含了一個DML語句和一條DDL語句。DML語句包含了GTID、QUERY、TABLEMAP、WRITEROW、XID五個event,DDL語句包含了GTID、QUERY兩個event。

MySQLbinlog工具同樣可以解析binlog,提供與show binlog event類似的event信息,以其中一個event為例來說明:

  1. #170417 23:18:37 server id 30001  end_log_pos 412 CRC32 0x818b4058      Write_rows: table id 110 flags: STMT_END_F 
  2.  
  3. BINLOG ' 
  4. zdz0WBMxdQAALQAAAHQBAAAAAG4AAAAAAAEABG15ZGIAAkkxAAEDAAF0sqv/ 
  5. zdz0WB4xdQAAKAAAAJwBAAAAAG4AAAAAAAEAAgAB//4KGgAAWECLgQ== 
  6. '/*!*/; 
  7. ### INSERT INTO `mydb`.`I1` 
  8. ### SET 
  9. ###   @1=6666 
  10. # at 412 

(1) Event的時間

  • 為主庫執行事務的時間,不管從庫的relay log和binlog,時間均為主庫執行事務的時間。

(2) Event的server_id

  • 記錄是執行該事務的數據庫的server_id,可以用來區分這條事務是主庫還是從庫執行的。

(3) Event的end log pos

  • 從庫relay log中end log pos為對應主庫中binlog的該event的真實文件位置。
  • 主庫和從庫的binlog中,的end log pos為該binlog的文件真實位置。

(4) EVENT的at xxx

  • at xxx代表該event在文件中的真實位置。

對于以上二進制日志文件的內容,我們需要關注的信息包括:

  • Previous_gtids events記錄了當前binlog之前執行過的所有的gtid信息,用來定位具體的gtid。
  • GTID event中對應的GTID,與事務是一一對應的,表明該事務是由主庫執行還是由從庫執行的。
  • 當錯誤發生時,事務執行的時間,事務的執行和具體語句。
  • 主庫執行數據庫操作后,將相關日志記錄到主庫的binlog中。備庫的IO線程接收到主庫傳輸的binlog日志后,將這些日志記錄到relay log中,如果備庫開啟了logslaveupdates選項,那么SQL線程在重放relay log過程中,會記錄相關binlog日志。這三個二進制文件日志,執行內容上應該是相同的。

1.4 查看其他變量

查看其他復制相關的系統變量或者狀態,如:

  • 執行“show variables like‘gtid_mode’”查看gtid是否開啟;
  • 執行“show status like ‘Rplsemisyncmasterstatus’”查看半同步復制的狀態。

這里不再一一列舉。

2. 排查錯誤

在收集到以上復制信息后,主要通過如下手段排查復制錯誤:

2.1 查看show slave status

查看是哪個線程(IO線程或者SQL線程)發生錯誤,查看錯誤原因。

  • 如果是IO線程發生錯誤,記錄發生錯誤時接收到的binlog文件名和位置(如果開啟了GTID則記錄GTID);
  • 如果是SQL線程發生錯誤,記錄發生錯誤時執行到的relay log文件名和位置(如果開啟了GTID則記錄GTID)。

2.2 查看錯誤日志

進一步確認發生錯誤的原因,部分原因只會記錄在錯誤日志中,不會在show slave status中展示。比如,空間不足導致IO線程出錯、網絡中斷導致IO線程異常等。

查看是不是由于其他用戶正常關閉復制或者kill復制相關的線程導致復制不可用。

查看發生錯誤時,是否為剛剛啟動復制、發生錯誤的語句,是否為***條復制執行的語句。如果為***條語句,則需要考慮是否由于搭建復制錯誤的原因導致復制異常,是否由于意外宕機等其他因素導致復制相關二進制日志文件不正確。

對比主庫和備庫的錯誤日志,查看是否均發生了同樣的復制錯誤,是否主庫做了特殊的錯誤處理。

2.3 對比二進制日志文件

對比備庫正在接收的binlog與主庫正在執行的binlog是否存在沖突(備庫接收的binlog文件和位置要大于主庫執行的)。

如果開啟了GTID,查看備庫是否本身執行了數據庫操而產生了GTID,還要查看備庫執行過的GTID是否要多于主庫,備庫是否執行過其他主機的GTID。

根據發生錯誤時的binlog文件和位置(或者GTID),解析主庫和備庫的二進制文件,對比相同的文件和位置(或者相同的GTID)時日志中記錄的操作是否相同。

查看備庫的二進制文件,備庫是否執行過與主庫沖突的操作。

二、總結

對于處于正常狀態的復制,應是以下狀態:

  • 查看復制狀態應該是正常狀態,如show slave status顯示IO線程和SQL線程的運行狀態均為YES,如半同步復制中show status like “rpl%”顯示的半同步復制狀態為ON。
  • 主庫和備庫均沒有復制相關的錯誤信息報出。
  • 主庫和備庫的二進制日志文件中記錄的數據庫操作內容應一致,主庫和備庫中的數據內容應保持一致。 通過對比分析上述信息,查看異常的狀態或者日志,可以為我們排查復制相關的錯誤提供更多的幫助。

三、版本和配置

總體來說,版本和配置不同只是會造成各種信息的顯示格式不同,并不會對上述方法造成過多影響。

1. 版本

上述信息收集和分析的舉例均是在MySQL-5.7版本上進行的,不同大版本在信息的內容或者信息的存放方式上可能存在一定差異。

MySQL-5.6版本與MySQL-5.7版本在復制相關信息上存在以下差異:

  • 日志:在MySQL-5.6在停止復制時,error log會有錯誤的信息記錄:
    1. 2017-04-18 17:32:46 682 [Note] Error reading relay log event: slave SQL thread was killed 
    2. 2017-04-18 17:32:46 682 [ERROR] Error reading packet from server: Lost connection to MySQL server during query ( server_errno=2013
    3. 2017-04-18 17:32:46 682 [Note] Slave I/O thread killed while reading event 
    4. 2017-04-18 17:32:46 682 [Note] Slave I/O thread exiting, read up to log 'b5620.000004', position 151 
  • GTID:MySQL-5.6的gtid_executed以global system variables方式展現,MySQL-5.7是以MySQL.gtid_executed表的方式展現。
  • BINLOG:MySQL-5.6版本在使用自增ID時,會使用如下event來記錄自增ID
    1. #170419 11:27:12 server id 30061  end_log_pos 494 CRC32 0x7a9f75c6      Intvar 
    2. SET INSERT_ID=1/*!*/; 

2. 配置

主要體現差異的配置包括gtidmode和binlogformat。

(1) gtid_mode

當gtid開啟時,gtid作為判斷事務由誰執行,是否執行過、事務接收和執行進度的標準。同時,可以通過show slave status直觀看出gtid的接收、執行情況。

當gtid關閉時,file和pos作為接收和執行的判斷標準,serverid作為事務由誰執行的標準。但是事務對應的所有的serverid并沒有完全的展現出來,所以對于我們排查問題,造成一定的困難。

(2) binlog_format

binlog_format影響的是記錄到binlog中日志內容的格式,以同一條INSERT語句為例,statement格式記錄到binlog中的格式如下(只顯示差異部分):

  1. #170418 17:47:06 server id 30001  end_log_pos 730 CRC32 0xdaf9a789      Query   thread_id=154   exec_time=0     error_code=0 
  2. SET TIMESTAMP=1492508826/*!*/; 
  3. insert into mydb.m1 values (13) 
  4. /*!*/; 

row格式記錄到binlog中的格式如下:

  1. #170418 17:46:25 server id 30001  end_log_pos 376 CRC32 0xcfdad7cd      Table_map: `mydb`.`m1` mapped to number 114 
  2. # at 376 
  3. #170418 17:46:25 server id 30001  end_log_pos 416 CRC32 0xed08eabe      Write_rows: table id 114 flags: STMT_END_F 
  4.  
  5. BINLOG ' 
  6. ceD1WBMxdQAALQAAAHgBAAAAAHIAAAAAAAEABG15ZGIAAm0xAAEDAAHN19rP 
  7. ceD1WB4xdQAAKAAAAKABAAAAAHIAAAAAAAEAAgAB//4NAAAAvuoI7Q== 
  8. '/*!*/; 
  9. ### INSERT INTO `mydb`.`m1` 
  10. ### SET 
  11. ###   @1=13 
  12. # at 416 

【本文是51CTO專欄機構作者“大U的技術課堂”的原創文章,轉載請通過微信公眾號(ucloud2012)聯系作者】

 戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-06-10 20:47:06

MySQL復制線程

2021-12-26 00:10:39

二分法排查版本

2011-03-28 10:03:46

Btrace

2022-01-26 19:42:05

MySQL亂碼排查

2023-03-02 08:53:57

排查問題效率經驗

2022-02-08 16:17:41

MySQL主從復制數據庫

2018-12-10 10:30:40

阿里Linux命令

2025-12-18 06:20:00

Wireshark網絡IP地址

2021-06-28 08:00:00

Python開發編程語言

2018-11-06 12:12:00

MySQL內存排查

2017-08-18 22:40:33

線上線程備份

2024-11-21 16:47:55

2010-05-06 15:29:53

Oracle數據復制

2017-10-18 15:07:21

MySQL執行死鎖

2013-03-27 10:32:22

2024-10-10 15:32:51

2022-07-03 07:34:32

Citrix虛擬桌面

2023-04-25 18:54:13

數據數據丟失

2019-01-29 08:41:16

MySQL性能突發事件

2010-05-14 18:26:39

MySQL 復制設置
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久久| 亚洲精品v欧美精品v日韩精品| 日本高清视频网站www| 色天天综合久久久久综合片| 国产蜜臀一区二区打屁股调教| 久久久久久国产精品三级玉女聊斋 | 久久久精品人体av艺术| 亚洲成人男人天堂| 亚洲欧美在线x视频| 国产精品久久天天影视| 欧美在线一区视频| 在线电影院国产精品| 综合视频一区| 午夜精品一区二区在线观看的| 一区二区三区欧美日韩| 松下纱荣子在线观看| 成人免费网站在线观看| 91麻豆免费观看| 操你啦在线视频| 国产精品久久久久一区二区| 成人av资源在线| 成人短视频在线| 国产精品18久久久久久麻辣| 国产一区二区三区四区五区入口| 欧美日韩999| 亚洲人成久久| 国产精品999视频| 精品福利在线视频| 欧美精品成人| 日本电影亚洲天堂| 岛国精品在线观看| 免费不卡av| 99精品国产一区二区| 久久九九影视网| 97se综合| 欧美性天天影院| 一本一本大道香蕉久在线精品| 欧美电影在线观看免费| 日韩视频免费播放| 精品国产99国产精品| 中文无码久久精品| 婷婷福利视频导航| 久久久之久亚州精品露出| 成人免费观看男女羞羞视频| 免费在线看污片| 久久亚洲高清| 欧美在线制服丝袜| 国产精品久久久久无码av| 嫩草影院2018| 欧美一区二区三区免费视| 91在线视频播放地址| 日韩av中字| 久久久99精品视频| 亚洲精品中文字幕女同| 亚洲深夜av| av文字幕在线观看| 久久一区二区精品| 欧美美女激情18p| 欧美体内she精视频在线观看| 欧美xxx.com| 超碰97国产在线| 欧美综合欧美视频| 中文亚洲欧美| 亚洲综合伊人久久大杳蕉| 欧洲在线视频一区| 精品久久一区二区| 极品少妇xxxx偷拍精品少妇| 国产99在线观看| 成人免费在线网| 久久香蕉国产线看观看av| 国产日韩精品久久久| 农村少妇一区二区三区四区五区| jlzzjlzz欧美| 91免费国产网站| 欧美视频一区二区三区| 亚洲欧美日韩精品一区二区| 日韩一区二区精品葵司在线| 国产偷自视频区视频一区二区| 在线看黄网站| 国产一级大片免费看| 欧美国产精品一区二区三区| 日韩成人精品| www.99.热| 国产精品视频xxx| 欧美性猛交xxxx黑人| 黄色精品网站| xxx.xxx欧美| 国产91沈先生在线播放| 久久成人久久鬼色| 欧美国产一区二区三区激情无套| av在线播放观看| 嫩草影院中文字幕| 亚洲v日韩v综合v精品v| 亚洲激情中文1区| 欧美1级日本1级| 国产色婷婷在线| 国产aaa免费视频| 欧美精品久久久久a| 亚洲444eee在线观看| 欧美极品一区二区三区| 国产乱码在线| 欧美精品成人网| 91精品中国老女人| 亚洲第一免费播放区| 久久久天堂av| 中文字幕免费一区二区| 中文在线а√天堂| 男女羞羞视频网站| 欧美精品一区在线发布| 日韩一区二区av| 精品久久久久久中文字幕| 99精品免费视频| 91精品网站在线观看| 最近97中文超碰在线| 一本久久a久久精品vr综合| 久久久久久亚洲精品| 欧洲精品中文字幕| 91在线视频官网| 欧美.日韩.国产.一区.二区| 卡通欧美亚洲| 男人天堂v视频| 在线观看亚洲视频啊啊啊啊| 久久久久久久久网站| 欧美日韩在线播放三区| 91蝌蚪国产九色| 野花国产精品入口| av毛片精品| 色婷婷av在线| 天堂中文字幕| 成品人视频ww入口| 国产成人成网站在线播放青青| 伊人久久久久久久久久久| 精品久久久久国产| 91丨九色porny丨蝌蚪| 中文国产一区| 五月综合久久| 成人免费短视频| 国产女人在线观看| 天天干天天综合| 影音先锋男人的网站| 91久久精品国产91久久性色| 视频一区视频二区国产精品| 91国偷自产一区二区开放时间| 97se亚洲国产综合自在线观| 亚洲国产综合在线看不卡| 精品国产乱子伦一区二区| 国产高潮在线| 国产永久免费高清在线观看视频| 18岁网站在线观看| 色综合久久久久久久久五月| 国产精品福利在线观看| www.亚洲成人| 亚洲精品国产福利| 欧美熟乱第一页| 亚洲成人免费影院| 国产精品少妇自拍| 成人免费视频一区| 美女视频黄频大全不卡视频在线播放| 国产精品久久久久久久免费观看 | 最近2019年好看中文字幕视频| 欧洲一区在线电影| 国产高清日韩| 日本aⅴ亚洲精品中文乱码| 久久久久久久久伊人| 亚洲三级小视频| 粉嫩老牛aⅴ一区二区三区| 欧美一区二区麻豆红桃视频| 99精品视频在线免费播放 | 99re热这里只有精品视频| 久久成人一区| 香蕉综合视频| 国产a久久精品一区二区三区 | 青青操视频在线| 成年人福利视频| 熟妇人妻无乱码中文字幕真矢织江 | 国产精品网红福利| 91禁国产网站| 久久久久亚洲精品| 久久人人爽人人爽爽久久| 亚洲奶大毛多的老太婆| 精品国产一区二区亚洲人成毛片| 欧美精三区欧美精三区| 欧美亚洲图片小说| 色综合久久久久网| 色婷婷综合久久| 91久久精品日日躁夜夜躁欧美| 精品久久久久久久久久久| 亚洲国产wwwccc36天堂| 亚洲国产精品精华液网站| 一区二区三区鲁丝不卡| 一区二区成人在线视频| 亚洲伦理在线精品| 亚洲国产一区二区在线播放| 亚洲专区一二三| 疯狂做受xxxx欧美肥白少妇| 色综合激情久久| 欧美一级黄色片| 亚洲欧美激情一区| 久久久999精品视频| 欧美精品久久久久久久免费观看|