我将 MySQL 链式复制设置为 Master->Slave1->Slave2。
事件从 M->S1 复制得非常好,并且还记录到 S1 上的中继和二进制日志中,但是 S2 没有收到这些事件。
SHOW SLAVE STATUS
S2 上显示 IO 和 SQL 线程都在运行,不断Exec_Master_Log_Pos
变化但保持静态。Relay_Log_Space
Relay_Log_Pos
Master 是 MySQL 5.5,S1 & S2 都是 MySQL 5.6.40。
有趣的是,如果任何更新直接在 S1 上完成,那么它们会正确地复制到 S2。
我检查过任何服务器上的磁盘空间都没有满。
还查看并评论了Mysql 复制已启用,但停留在“等待 binlog 更新”
我S1
有:
mysql> show global variables like '%slave%';
+------------------------------+-----------------------+
| Variable_name | Value |
+------------------------------+-----------------------+
| init_slave | |
| log_slave_updates | ON |
| log_slow_slave_statements | OFF |
| rpl_stop_slave_timeout | 31536000 |
| slave_allow_batching | OFF |
| slave_checkpoint_group | 512 |
| slave_checkpoint_period | 300 |
| slave_compressed_protocol | OFF |
| slave_exec_mode | STRICT |
| slave_load_tmpdir | /tmp |
| slave_max_allowed_packet | 1073741824 |
| slave_net_timeout | 3600 |
| slave_parallel_workers | 0 |
| slave_pending_jobs_size_max | 16777216 |
| slave_rows_search_algorithms | TABLE_SCAN,INDEX_SCAN |
| slave_skip_errors | OFF |
| slave_sql_verify_checksum | ON |
| slave_transaction_retries | 10 |
| slave_type_conversions | |
| sql_slave_skip_counter | 0 |
+------------------------------+-----------------------+
On M:
- SELECT @@global.server_id=6
- SELECT @@global.server_uuid=05ac0062-7af8-11e5-9af2-9c8e991000d2
On S1:
- SELECT @@global.server_id=4
- SELECT @@global.server_uuid=062ad58e-59ed-11e8-a7ea-000d3a32adb2
On S2:
- SELECT @@global.server_id=6
- SELECT @@global.server_uuid=184b1c69-7868-11e8-aeab-000d3a321333
问题源于log_slave_updates。您需要它,
S1
以便 的二进制日志S1
可以作为S2
读取事件的来源。请将此行添加到 my.cnf 中
S1
并在 上重新启动 mysqld
S1
。S1
然后,设置从到的复制S2
。S2
当前与 不同步S1
,因此S2
可能需要使用pt-table-checksum和pt-table-sync重新加载或同步。更新 2018-06-25 12:23 EDT
谢谢你的更新,
这是你的问题:
M1
并S2
具有相同的server_id。S2
如果传入事件server_id
与 相同,则永远不会处理事件S2
。将 server_id 更改为M 和 S1
S2
以外的内容4
或6
由 M 和 S1 使用的内容。