Mysql

從 5.1 master 到 5.6 slave 的 MySql 複製不斷崩潰

  • January 3, 2022

我最近將其中一個複制從屬更新為 mysql 5.6。從 master 導入最近的轉儲後,我執行 mysql_upgrade 沒有錯誤。

數據庫守護程序正確啟動,沒有錯誤。

當我試圖啟動奴隸時,問題就開始了;從站的引擎幾乎立即崩潰,進入崩潰/重啟無限循環。

這是我已經嘗試過的

  • 從 5.1 升級到 5.5(在 5.5 複製沒有問題),然後升級到 5.6(崩潰)
  • 將主從二進制日誌更改為行格式(配置文件中的 binlog-format=ROW )
  • 主從都休息

我的配置是

  • 兩個服務都託管在虛擬機上(每個服務一個)
  • 執行 CentOS 6.5
  • VM 有 4 個 CPU 和 8 GB 記憶體

這是日誌轉儲:

2014-11-13 14:03:07 1022

$$ Note $$從 I/O 執行緒:連接到主 ‘replicator@10.209.1.147:3306’,複製開始於日誌 ‘mysql-bin.000069’ 的位置 31248706
2014-11-13 14:03:07 1022 $$ Warning $$Slave SQL:如果發生crash,這個配置不保證relay log info一致,Error_code: 0
2014-11-13 14:03:07 1022$$ Note $$從屬 SQL 執行緒已初始化,在位置 3940 的日誌“mysql-bin.000069”中開始複製,中繼日誌“/data/relay-bin.000003”位置:4103
2014-11-13 14:03:07 1022$$ Warning $$從站 I/O:通過 SET @master_binlog_checksum= @@global.binlog_checksum 通知主站失敗並出現錯誤:未知系統變數“binlog_checksum”,錯誤程式碼:1193

2014-11-13 14:03:07 1022$$ Warning $$從站 I/O:主站上的未知系統變數“SERVER_UUID”。一個可能的原因是主伺服器(版本:5.1.71-log)不支持該變數,即使它在從伺服器(版本:5.6.21-log)上,Error_code:1193
2014-11-13 14: 03:07 1022$$ ERROR $$從伺服器讀取數據包時出錯:在二進制日誌索引文件中找不到第一個日誌文件名 (server_errno=1236)

2014-11-13 14:03:07 1022$$ ERROR $$從 I/O:從二進制日誌讀取數據時,從主機收到致命錯誤 1236:“在二進制日誌索引文件中找不到第一個日誌文件名”,錯誤程式碼:1236
2014-11-13 14:03:07 1022$$ Note $$從 I/O 執行緒退出,讀取到日誌 ‘mysql-bin.000069’,位置 31248706
2014-11-13 14:03:07 1022 $$ ERROR $$從屬 SQL:無法在表 tpportal.player_game_plays 上執行 Write_rows_v1 事件;鍵“PRIMARY”的重複條目“5890402”,錯誤程式碼:1062;處理程序錯誤 HA_ERR_FOUND_DUPP_KEY;事件主日誌 mysql-bin.000069, end_log_pos 5048, Error_code: 1062
2014-11-13 14:03:07 1022$$ Warning $$從站:密鑰“PRIMARY”的重複條目“5890402”錯誤程式碼:1062
2014-11-13 14:03:07 1022$$ ERROR $$執行查詢時出錯,從屬 SQL 執行緒中止。修復問題,用“SLAVE START”重啟slave SQL執行緒。我們停在日誌 ‘mysql-bin.000069’ 位置 3940
14:03:07 UTC - mysqld 得到信號 11 ;
這可能是因為您遇到了錯誤。此二進製文件或與之鍊接的庫之一也可能
已損壞、建構不正確
或配置錯誤。此錯誤也可能是由硬體故障引起的。
我們將盡最大努力收集一些資訊,希望能幫助

診斷問題,但由於我們已經崩潰,
肯定有問題,這可能會失敗。

key_buffer_size=8388608
read_buffer_size=131072

max_used_connections=1
max_threads=100
thread_count=2

connection_count=1

mysqld 可能最多可以使用

key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 47962 K 字節記憶體

希望沒關係;如果不是,減少方程中的一些變數。

執行緒指針:0x7fc53c000990
正在嘗試回溯。您可以使用以下資訊找出
mysqld 死在哪裡。如果您在此之後沒有看到任何消息,則
出現嚴重錯誤…

stack_bottom = 7fc547ffe7e0 thread_stack 0x40000

/usr/sbin/mysqld(my_print_stacktrace+0x35)

$$ 0x8dbbb5 $$

/usr/sbin/mysqld(handle_fatal_signal+0x494)$$ 0x665f24 $$

/lib64/libpthread.so.0(+0xf710)$$ 0x7fc695957710 $$

/usr/sbin/mysqld(_Z10free_blobsP5TABLE+0x13)$$ 0x76c103 $$

/usr/sbin/mysqld(_ZN14Relay_log_info20clear_tables_to_lockEv+0x31)$$ 0x8b5e91 $$

/usr/sbin/mysqld(_ZN14Relay_log_info15cleanup_contextEP3THDb+0x84)$$ 0x8b6064 $$

/usr/sbin/mysqld(handle_slave_sql+0x1e6)$$ 0x8b1ea6 $$

/usr/sbin/mysqld(pfs_spawn_thread+0x12a)$$ 0xb00b1a $$

/lib64/libpthread.so.0(+0x79d1)$$ 0x7fc69594f9d1 $$

/lib64/libc.so.6(clone+0x6d)$$ 0x7fc6946a0b6d $$

試圖獲得一些變數。
某些指針可能無效並導致轉儲中止。
查詢 (0):是一個無效指針
連接 ID(執行緒 ID):4
狀態:NOT_KILLED http://dev.mysql.com/doc/mysql/en/crashing.html

的手冊頁 包含 應該幫助您找到的資訊找出導致崩潰的原因。141113 14:03:07 mysqld_safe 現在執行的程序數:0 141113 14:03:07 mysqld_safe mysqld 重新啟動2014-11-13 14:03:08 0

$$ Warning $$不推薦使用帶有隱式 DEFAULT 值的 TIMESTAMP。請使用 –explicit_defaults_for_timestamp 伺服器選項(有關詳細資訊,請參閱文件)。
2014-11-13 14:03:08 1091 $$ Note $$外掛 ‘FEDERATED’ 已禁用。
2014-11-13 14:03:08 1091 $$ Note $$InnoDB:使用原子來引用計數緩衝池頁面

2014-11-13 14:03:08 1091$$ Note $$InnoDB:InnoDB 記憶體堆被禁用
2014-11-13 14:03:08 1091$$ Note $$InnoDB:互斥鎖和 rw_locks 使用 GCC atomic
builtins 2014-11-13 14:03:08 1091$$ Note $$ InnoDB:未使用記憶體屏障
2014-11-13 14:03:08 1091$$ Note $$ InnoDB:壓縮表使用 zlib 1.2.3
2014-11-13 14:03:08 1091 $$ Note $$InnoDB:使用Linux原生AIO
2014-11-13 14:03:08 1091 $$ Note $$InnoDB:使用 CPU crc32 指令
2014-11-13 14:03:08 1091$$ Note $$InnoDB:初始化緩衝池,大小=4.0G

2014-11-13 14:03:08 1091$$ Note $$InnoDB:緩衝池初始化完成
2014-11-13 14:03:08 1091$$ Note $$InnoDB:支持的最高文件格式是梭子魚。
2014-11-13 14:03:08 1091 $$ Note $$InnoDB:ibdata 文件中的日誌序列號 115242901774 和 115242901774 與 ib_logfiles 中的日誌序列號 115242901784 不匹配!
2014-11-13 14:03:08 1091$$ Note $$InnoDB:數據庫未正常關閉!
2014-11-13 14:03:08 1091$$ Note $$InnoDB:開始崩潰恢復。
2014-11-13 14:03:08 1091$$ Note $$InnoDB:從 .ibd 文件中讀取表空間資訊…
2014-11-13 14:03:08 1091$$ Note $$InnoDB:恢復可能的半寫數據頁
2014-11-13 14:03:08 1091$$ Note $$InnoDB:來自雙寫緩衝區…
InnoDB:最後一個 MySQL binlog 文件位置 0 1405,文件名 mysql-bin.000010
2014-11-13 14:03:09 1091$$ Note $$InnoDB:128 個回滾段處於活動狀態。
2014-11-13 14:03:09 1091$$ Note $$ InnoDB:等待清除開始
2014-11-13 14:03:09 1091$$ Note $$ InnoDB:5.6.21 開始;日誌序列號 115242901784

2014-11-13 14:03:09 1091$$ Note $$使用 /data/mysql-bin
2014-11-13 14:03:09 1091崩潰後恢復$$ Note $$開始崩潰恢復…
2014-11-13 14:03:09 1091$$ Note $$崩潰恢復完成。
2014-11-13 14:03:09 1091$$ Note $$伺服器主機名(綁定地址):’*’;埠:3306

你的 master 與 5.6 slave 不兼容。binlog_checksum僅在 5.6 上可用,UUID 也是如此。我已經成功地複制了 5.5 和 5.6 之間的伺服器。也許您可以檢查是否可以禁用這些選項。

2014-11-13 14:03:07 1022

$$ Warning $$從站 I/O:通過 SET @master_binlog_checksum= @@global.binlog_checksum 通知主站失敗並出現錯誤:未知系統變數“binlog_checksum”,錯誤程式碼:1193 2014-11-13 14:03:07 1022$$ Warning $$從站 I/O:主站上的未知系統變數“SERVER_UUID”。一個可能的原因是該變數在主伺服器(版本:5.1.71-log)上不受支持,即使它在從屬伺服器(版本:5.6.21-log)上,Error_code:1193

Manny Calaverra 能夠從 5.5 複製到 5.6,但您無法從 5.1 複製到 5.6 的原因是 MySQL 文件中列出的版本控制支持。開發團隊僅在目前版本的 MySQL 和最新的次要版本之間保留完整的向後主/從兼容性。因此,如果沒有有效的解決方法,那是因為數據庫應用程序根本不支持該功能。

資料來源:MySQL 版本之間的複制兼容性

MySQL 支持從一個版本系列複製到下一個更高版本系列。例如,您可以從執行 MySQL 5.6 的源複製到執行 MySQL 5.7 的副本,從執行 MySQL 5.7 的源複製到執行 MySQL 8.0 的副本,等等。但是,如果源使用語句或依賴副本上使用的 MySQL 版本不再支持的行為,則在從舊源複製到新副本時可能會遇到困難。例如,MySQL 8.0 不再支持超過 64 個字元的外鍵名稱。

如果可以的話,已經完成的一種方法是創建一個中間人伺服器。我已經看到人們描述成功創建(特別是)MySQL 5.1 伺服器複製到 MySQL 5.5 伺服器然後復製到 MySQL 5.6 伺服器的文章。

引用自:https://dba.stackexchange.com/questions/82582