我有两个 MySQL(实际上是 MariaDB)服务器,一个主服务器和一个带有标准复制的从属服务器。在不到一个月的时间里,我的奴隶已经有两次无法使用了。
这是我的经历:
SHOW SLAVE STATUS \G
STOP SLAVE
STOP SLAVE
挂起SHOW SLAVE STATUS \G
在另一个已经连接的客户端上执行,它也挂了。之后,我看到了使用 CPU 的 MySQL 进程,我看到了很多使用 iotop 的磁盘写入,所以我让它做它的东西一段时间。
15 分钟后,我杀死了 MySQL 进程 -9,因为我感到沮丧。然后我重新启动 MySQL,我可以连接和运行查询,很好。
我执行SHOW SLAVE STATUS \G
现在可以工作了,它看起来很正常:master 后面的秒数 = 0,等待事件。然后我继续在 master 上执行CREATE DATABASE foobar
以查看复制是否有效,但它没有。
同样,那时我看到了很多磁盘写入,所以我认为复制正在赶上。两个小时后,我终于决定检查SHOW PROCESSLIST
,我看到执行的只是一个OPTIMIZE TABLE table1 ...
,然后我记得我上次遇到了完全相同的问题。
我用那个查询终止了这个进程,然后我重新执行SHOW PROCESSLIST
,果然它赶上了主人。SHOW SLAVE STAUTS \G
报告落后master 15k 秒,这是连贯的。
无论如何,在那堵文字墙之后,我的问题是: