今天有台mysql从数据库服务器因为磁盘满了而导致同步失败,访问也失败,清理空间后重启mysql一切都显示正常,查看同步专业如下:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.10.1
Master_User: repluser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.006842
Read_Master_Log_Pos: 67309612
Relay_Log_File: mysqld-relay-bin.019867
Relay_Log_Pos: 66793478
Relay_Master_Log_File: master-bin.006833
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
同步的两个slave都是yes,也就没留意它了,到后来才发现它实际上停止的,没有任何错误提示,想想取消同步,再开启说不定就可以了,结果一执行stop slave就卡死了。
mysql> stop slave;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 15367
Current database: *** NONE ***
接下来就什么都操作不了了,kill mysql重新启动重复操作都不行。
应该是磁盘满的时候同步的日志文件没有写完整,导致同步的时候卡死。最后查看mysql任务列表发现有个卡了1865618秒的Waiting for an event from Coordinator复制进程任务,决定kill它,应该是它卡了很久。
mysql> show processlist;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 18126
Current database: *** NONE ***
+——-+————-+———–+——+———+———+———————————————–+——————+
| Id | User | Host | db | Command | Time | State | Info |
+——-+————-+———–+——+———+———+———————————————–+——————+
| 16549 | system user | | NULL | Connect | 685 | Waiting for master to send event | NULL |
| 16550 | system user | | NULL | Connect | 685 | Waiting for Slave Worker to release partition | NULL |
| 16551 | system user | | NULL | Connect | 1865618 | Waiting for an event from Coordinator | NULL |
| 18126 | root | localhost | NULL | Query | 0 | init | show processlist |
+——-+————-+———–+——+———+———+———————————————–+——————+
4 rows in set (0.00 sec)
kill后确实可以stop slave同步了,可是一启动,又出现了,而且同样实际没有同步,会卡死所有的别的操作,最后没办法,只能老办法关闭多线程复制,改成单线程复制试试看。
mysql> set global slave_parallel_workers = 0;
重新kill,再开启同步,结果发现复活了。不知道为什么开始多并发同步就会卡死在一些错误的地方。同样暂时没有详细去寻找答案。