分享2個近期遇到的MySQL資料庫的BUG案例

懂點IT的耿小廚發表於2020-06-21

近一個月處理歷史資料問題時,居然連續遇到了2個MySQL BUG,分享給大家一下,也歡迎指正是否有問題。

BUG1:

資料庫版本:  MySQL5.7.25 - 28

作業系統: Centos 7.7(不重要)

資料庫架構: 主-從-級聯從

資料庫引數: 

innodb_support_xa = 1   # 因主庫存在XA事務,因此設定支援xa事務
replicate_wild_do_table=yy.%   # 只同步其中一個庫

異常場景:級聯從庫上同步從庫中的其中一個庫(或者部分表,即存在過濾篩選部分表的場景),其中主庫中其他庫(非需要的庫)存在XA事務,此時級聯從庫上啟動主從同步時出現以下錯誤

 [ERROR] Slave SQL for channel 'yy': Worker 1 failed executing transaction 'ANONYMOUS' at master log , end_log_pos 120460779;
The use of replication filters with XA transactions is not supported, and can lead to an undefined state in the replication slave.
Error_code: 3227

官方文件解答

查詢官方文件,有記錄對應問題

https://forums.mysql.com/read.php?3,667908,667908

該問題已在MySQL8.0中修復,對應的MySQL8.0中的內容可以參考此連結

https://dev.mysql.com/doc/refman/8.0/en/xa.html

臨時解決辦法: 

  • 方式一: 將本架構中的其中一個從庫設定binlog過濾,只記錄所需庫的binlog,再開啟級聯從庫的同步即可。
  • 方式二:使用ogg或canal等第三方工具處理同步
  • 方式三:寫同步指令碼定時同步

BUG2:

資料庫版本:  MySQL5.6.27-75,MySQL5.7.25-28(從MySQL5.6.27-75原地升級的)

資料庫架構: 主-從

異常場景: 

將一張大表轉移到備份庫中,使用rename的方式出現異常

SQL>  alter table tbname rename  to bak_db.tbname;

錯誤資訊如下:

2020-06-21T03:10:54.694718Z 200 [ERROR] InnoDB: Operating system error number 2 in a file operation.
2020-06-21T03:10:54.694737Z 200 [ERROR] InnoDB: The error means the system cannot find the path specified.
2020-06-21T03:10:54.694742Z 200 [ERROR] InnoDB: File ./testdb/tbname.ibd: 'rename' returned OS error 71.

在MySQL5.6.27 -75及其從庫MySQL5.7.25-28的版本中均出現

官方文件解答:

經查,官方文件中有對應的bug記錄

  • https://bugs.mysql.com/bug.php?id=74004
  • https://bugs.mysql.com/bug.php?id=86253

解決辦法:  

 

  • 方式三:如果是非靜態表,則可以考慮手動再目標庫建立新表,在原表上新增增刪改的觸發器(類似上文中的pt-osc變更表的處理方法)。

該BUG已修復,其他版本中已解決,但是通過實踐發現,原地升級的方式仍未解決,大家可以親自實踐驗證一下。

 

相關文章