帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】MySQL主从复制同步问题总结及排查处理过程

发表时间:2025-06-16 03:46:00 小编:油条

一、概述

mysql主从是常用的高可用架构之一,也是使用最广泛的的系统架构。在生产环境中mysql主从复制有时会出现复制错误问题。MySQL主从复制中的问题(Coordinator stopped beacause there were errors in the workers……)

二、mysql主从复制原理

mysql主从复制是一个异步复制过程(总体感觉是实时同步的),mysql主从复制整个过程是由三个线程完成。slave端有两个线程(SQL线程和IO线程),Master端有另一个(IO线程)。

1.MYSQL主从复制过程

  • 在Slave服务器上执行start slave,开启主从复制开关。
  • 此时,Slave 服务器上的 IO 线程通过 Master 服务器上授权复制用户的请求连接到 Master 服务器。它还请求从 binlog 日志文件的指定位置发送 binlog 日志内容。 (配置主从复制任务时执行change master命令时指定日志文件名和位置)
  • Master服务器收到Slave服务器IO线程的请求后,Master服务器上的IO线程是基于Slave的。 服务器的IO线程请求的信息在指定binlog日志文件的指定位置后读取binlog日志信息,然后返回给Slave端IO线程。除了binlog日志内容,在日志内容返回后Master服务器端还有一个新的binlog。 binlog 中的文件名和下一个指定的更新位置。
  • 当 Slave 服务器的 IO 线程从 Master 服务器获取 IO 线程发送的日志内容、日志文件和位置点时,添加 binlog。日志内容依次写入Slave端自身的relay log文件(mysql-relay-bin.xxxxxx)的末尾。并将新的binlog文件名和位置记录到master-info文件中,以便下次读取Master端新的binlog日志时,可以告诉Master服务器从新的binlog日志中从哪个文件以及从哪里开始请求新的binlog日志内容.
  • Slave server端的SQL线程实时检测本地relay log中新增的日志内容,及时relay log。 该文件的内容被解析成在Master端执行的SQL语句的内容,在Slave服务器本身按照语句的顺序执行SQL的应用。
  • 经过上述过程,可以保证在Master和Slave端执行相同的SQL语句。当复制状态正常时,Master 端和lave端的数据是完全一致的。

三、问题及解决方法

1.show slave status \G 显示如下报错信息

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction …

2.根据提示信息定位报错位置

情况一:"**Delete_rows"**

原因:在master上删除一条记录,而slave上找不到。

解决方法: 由于master要删除一条记录,而slave上找不到故报错,这种情况主上都将其删除了,那么从机可以直接跳过。

mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续 跳过错误有两种方式

1. 跳过指定数量的事务


mysql&gt;slave stop;
mysql&gt;SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1#跳过一个事务
mysql&gt;slave start

2. 跳所有错误或指定类型的错误

修改mysql的配置文件,通过slave_skip_errors参数来跳所有错误或指定类型的错误


vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误
#slave-skip-errors=all #跳过所有错误

到此这篇关于MySQL主从复制同步问题总结及排查处理过程的文章就介绍到这了,更多相关MySQL主从复制内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


联系我们
返回顶部