标准复制无故中断。
mysql> SELECT @@version, @@version_comment;
+---------------+----------------------------------------------------------------------------+
| @@version | @@version_comment |
+---------------+----------------------------------------------------------------------------+
| 5.6.15-56-log | Percona XtraDB Cluster (GPL), Release 25.5, Revision 759, wsrep_25.5.r4061 |
+---------------+----------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'wsrep_on';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wsrep_on | OFF |
+---------------+-------+
1 row in set (0.00 sec)
启用崩溃安全复制:
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = 1
从机运行良好:
# mysql -e "SHOW SLAVE STATUS\G" | grep "Slave"
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
但一段时间后,MASTER 上没有连接的从属服务器和 IO 线程从 MASTER 中消失:
mysql> SELECT * FROM information_schema.processlist WHERE command = 'Binlog Dump';
Empty set (0.10 sec)
mysql> SHOW SLAVE HOSTS;
Empty set (0.00 sec)
掌握:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 568210 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
奴隶:
# mysql -e "SHOW SLAVE STATUS\G" | grep "Master_Log"
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 568210
Relay_Master_Log_File: mysql-bin.000003
Exec_Master_Log_Pos: 568210
掌握:
mysql> CREATE DATABASE IF NOT EXISTS repl_test; SHOW MASTER STATUS;
Query OK, 1 row affected (0.00 sec)
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 568333 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
从站没有变化:
# mysql -e "SHOW SLAVE STATUS\G" | grep "Master_Log"
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 568210
Relay_Master_Log_File: mysql-bin.000003
Exec_Master_Log_Pos: 568210
slave 在 IO_THREAD 重新启动后获取更改:
# mysql -e "STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;"
# mysql -e "SHOW SLAVE STATUS\G" | grep "Master_Log"
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 568333
Relay_Master_Log_File: mysql-bin.000003
Exec_Master_Log_Pos: 568333
更新:2014 年 7 月 18 日星期五 14:15:59 BST
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: $IP
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000007
Read_Master_Log_Pos: 433
Relay_Log_File: mysql-relay.000265
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000007
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: 433
Relay_Log_Space: 710
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /etc/mysql/ca-cert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /etc/mysql/client-cert.pem
Master_SSL_Cipher:
Master_SSL_Key: /etc/mysql/client-key.pem
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: 1124732721
Master_UUID: 4412a455-e1d0-11e3-835a-5254007fe78d
Master_Info_File: mysql.slave_master_info
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
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl: /etc/mysql/ca-cert.pem
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
您所遇到的情况很容易在低流量情况下发生,尤其是当两台服务器被防火墙或其他实施状态数据包检测的设备隔开时。(例如,在 Amazon EC2/VPC 中可能会出现这种情况)。中间网络硬件可以“忘记”服务器之间的 TCP 连接,因为当没有数据被复制时,连接处于空闲状态。
当 slave 连接到 master 时,它会要求 master 每 60 秒向 binlog 流中注入一条心跳消息,但前提是在这段时间内没有复制事件 - 所以当有流量很大,但是当流量少时,会发送心跳事件,并且连接会保持活动状态。
请注意,这
CHANGE MASTER TO
通常是一个破坏性命令,可以重置您的复制配置。在这种情况下,如果MASTER_HEARTBEAT_PERIOD
是唯一提供的参数,则从配置不会被重置。http://dev.mysql.com/doc/refman/5.6/en/change-master-to.html
还可以考虑将全局变量设置为
slave_net_timeout
比默认值更短的值,但不小于您用于主心跳周期的值的两倍。如果在配置的时间段内复制流上没有任何反应,这将导致从站断开并重试与主站的连接。编辑:在我的第一个假设之后,我的下一个赌注是网络问题。使用迈克尔的建议,他们有我的赌注和投票。
可能您的问题是
wsrep_on = OFF
+的组合DDL
。在这种情况下,二进制日志可能会发生奇怪的事情(也就是它们可能没有被正确记录)。即使您只有一个节点,或者使用 galera-aware 命令隔离它,也要确保启用它。确保您也激活了
log_slave_updates
.master 和 slave 是同一个 Galera 集群的一部分吗?