MySQL Cluster -> Galera MariaDB Cluster Replication 不工作,但沒有錯誤
我正在執行 MySQL Cluster 7.2 (MySQL 5.5) 的 2 節點主集群和執行帶有 Galera 集群的 MariaDB 10.3 的 2 節點從集群(加上仲裁器)之間設置數據庫遷移。我目前關閉了除了一個 Galera 集群的節點之外的所有節點,以簡化編排。
配置顯示正確,並且
SHOW ALL SLAVES STATUS \G
顯示的所有內容都表明復製成功。Read_
並且Exec_Master_Log_Pos
相互匹配以及主伺服器報告的內容,沒有記錄錯誤等。事實上,將數據庫添加到我們正在複製的主節點將在從節點中創建一個數據庫。 但是,沒有任何數據行被複製。mariadb.err 中唯一的奇怪之處如下:
2019-04-11 18:31:19 101 [Warning] Master '[redacted]': Slave I/O: Notifying master by SET @master_binlog_checksum= @@global.binlog_checksum failed with error: Unknown system variable 'binlog_checksum', Internal MariaDB error code: 1193
主複製配置:
server-id=13 binlog-format = row log-bin=mysql-bin sync_binlog = 1
從屬複製配置:
server-id = 1 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index expire_logs_days = 10 max_binlog_size = 100M relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index relay_log_info_file = /var/log/mysql/relay-bin.info slave_sql_verify_checksum = 0 log_slave_updates read_only binlog_format=row
顯示主狀態;
File: mysql-bin.000049 Position: 4494988 Binlog_Do_DB: '' Binlog_Ignore_DB: ''
顯示所有從屬狀態 \G
*************************** 1. row *************************** Connection_name: [redacted]13 Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it Slave_IO_State: Waiting for master to send event Master_Host: [redacted] Master_User: replicant Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000049 Read_Master_Log_Pos: 4494988 Relay_Log_File: relay-bin-[redacted].000002 Relay_Log_Pos: 2982721 Relay_Master_Log_File: mysql-bin.000049 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 4494988 Relay_Log_Space: 2983028 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: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 13 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservative SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Slave_DDL_Groups: 0 Slave_Non_Transactional_Groups: 0 Slave_Transactional_Groups: 0 Retried_transactions: 0 Max_relay_log_size: 104857600 Executed_log_entries: 28995 Slave_received_heartbeats: 57 Slave_heartbeat_period: 30.000 Gtid_Slave_Pos: 1 row in set (0.000 sec)
啟動複製
在 master 上,我執行以下操作:
mysqldump -S /data/mysql/mysql.sock -u [redacted] -p --opt --skip-lock-tables --single-transaction --flush-logs --master-data=2 --databases [redacted] > replication.sql
然後我將 sql 複製到從伺服器,並將其通過管道傳輸到 Galera 節點。這使從站與轉儲點保持同步。
然後我在從伺服器上執行以下命令:
head -n100 replication.sql | grep "MASTER_LOG_POS"
獲取正確的起始文件和複製位置,然後在 SQL 中執行以下命令:
CHANGE MASTER '[redacted]' TO MASTER_HOST='[redacted]', MASTER_USER='replicant', MASTER_PASSWORD='[redacted]', MASTER_LOG_FILE='[file]', MASTER_LOG_POS=[position];
在過去的幾天裡,我已經查看了該網站和其他網站上的數十篇文章,但尚未找到解決方案。以下是一些證明勤奮的例子:
MySQL 複製不工作 - 沒有錯誤- 我關閉了所有過濾以確保這不是問題。
mysql 複製失敗(無錯誤) - 我們正在使用基於行的 bin-logging
MySQL 主從複製未更新- 這裡沒有真正的解決方案。我確認第一個答案列出的所有積極指標對我來說也是正確的。
MySQL 說複製很好,但沒有複製數據- 不使用過濾,伺服器 ID 不同等。
在 docker 容器中對不同版本的 MariaDB 和 MySQL 進行了大量實驗後,我確定 MariaDB 10.0 或更高版本會在遇到不可讀的行事件時靜默失敗並繼續執行。
在 docker 容器中使用 MariaDB 5.5 會
mysqlbinlog
發現以下複製錯誤:ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 42, event_type: 30 ERROR: Could not read entry at offset 938: Error in log format or read error.
此錯誤超出了所問問題的範圍。