MySQL 复制工作正常,但在 280000 秒时仍显示“Waiting for master to send event”

dgi*_*gig 6 mysql replication

重复标题:MySQL 复制工作正常,但 mytop 仍然显示一个线程“等待主发送事件”。这几天一直这样,现在是280000秒。但是复制就好了。

我可以看到另一个正在执行复制工作的线程,现在它位于“从属已读取所有中继日志;正在等待从属 I/O 线程对其进行更新”但它一直在运行查询,我可以验证从站只是通过查看数据是最新的。

我可以终止这个进程吗?

我最近不得不重新设置复制,这涉及创建一个新的复制用户,所以我不确定这是否是导致这个“幽灵复制过程”的原因。

Rol*_*DBA 9

你不敢杀死那个进程。为什么 ?

运行此查询

SELECT COUNT(1) FROM information_schema.processlist WHERE user='system user';
Run Code Online (Sandbox Code Playgroud)

答案必须是两个。为什么 ?

2 个线程上的标准 MySQL 复制功能:1) IO 线程,2) SQL 线程。在我的旧帖子中 MySQL 是否支持复制所有数据库?,我解释了两个线程之间的共生关系。

当你运行时SHOW SLAVE STATUS\G,你会看到三行:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
  • Seconds_Behind_Master: 0

这是健康复制过程的标志。如果Slave_IO_RunningSlave_IO_RunningNo,则复制没有运行是因为六 (6) 个原因之一:

  • 有人跑了STOP SLAVE;,这会关闭 IO 线程和 SQL 线程
  • 有人跑了STOP SLAVE IO_THREAD;,这会关闭 IO 线程
  • 有人跑了STOP SLAVE SQL_THREAD;,这会关闭 SQL 线程
  • 存在复制用户身份验证错误,这会关闭 IO 线程
  • 出现网络错误,关闭了 IO 线程
  • 有一个 SQL 错误,它关闭了 SQL 线程

当这些情况中的任何一个出现时,Seconds_Behind_MasterNULL。号码280000呢?这只是 IO 线程运行的时间长度(超过 82 小时)。没关系。这不是一个幽灵进程。复制需要一个 IO 线程从 Master 的二进制日志中读取二进制日志事件。

总之,您的 IO 线程已启动超过 82 小时。不要搞乱复制。