mysql主从同步报错解决

本文介绍了在MySQL主从同步过程中遇到的问题,从错误日志分析得出,由于从库中缺少特定记录,导致在执行Update_rows事件时发生错误,错误代码为1032。解决方案是手动在从库中插入缺失记录,然后重新启动 Slave SQL 线程。通过使用`mysqlbinlog`工具定位并查看引发问题的具体SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看mysql error.log日志如下

2021-08-19T07:19:04.118011+08:00 14933683 [ERROR] Slave SQL for channel '': Could not execute Update_rows event on table xxxdb.xxxtable; Can't find record in 'xxxtable', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000118, end_log_pos 615106549, Error_code: 1032
2021-08-19T07:19:04.118060+08:00 14933683 [Warning] Slave: Can't find record in 'xxxtable' Error_code: 1032
2021-08-19T07:19:04.118233+08:00 14933683 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000118' position 615075712.

可初步分析主从同步失败是因为从库在update xxxdb库xxxtable时,从库xxxtable某条记录不存在,导致update失败
执行如下语句查看具体的sql,其中mysql-bin.000118和615106549取于错误日志中的‘mysql-bin.000118, end_log_pos 615106549’

mysqlbinlog —no-defaults —base64-output=decode-rows -v /data/mysql/binlog/mysql-bin.000118|grep -A 200 615106549

输出如下,如果涉及到的sql比较多,200行不能完全显示,可自行调整
请添加图片描述
此次导致主从复制出问题就是因为截图中的某个sql在从库不存在,主库执行了update,到从库是就报错了,将从库对应记录手动插入即可

### MySQL 主从复制错误代码 2061 的解决方案 当遇到 MySQL 主从复制中的错误代码 2061 时,通常表示连接主服务器失败。这可能是由于网络配置不当、权限设置不正确或其他原因引起的。 #### 检查网络连通性 确保从服务器能够正常访问主服务器。可以通过 `ping` 或者 `telnet` 测试端口是否开放: ```bash ping MASTER_IP_ADDRESS telnet MASTER_IP_ADDRESS 3306 ``` 如果无法建立连接,则需检查防火墙设置以及主机之间的网络状况[^1]。 #### 验证用户权限 确认用于复制的账户具有足够的权限,并且能够在远程登录。可以在主服务器上执行如下命令来创建或修改复制账号: ```sql CREATE USER 'repl_user'@'SLAVE_HOST_OR_%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'SLAVE_HOST_OR_%'; FLUSH PRIVILEGES; ``` 这里 `'SLAVE_HOST_OR_%'` 应该被替换为实际允许连接的具体 IP 地址或者是 `%`(代表任何地方)。 #### 同步二进制日志位置 有时从库可能丢失了最新的 binlog 文件信息。可以尝试停止 IO_THREADSQL_THREAD ,重置 slave 并重新指定 master info: ```sql STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000009', MASTER_LOG_POS=235, MASTER_HOST='master_ip', MASTER_USER='replication_username', MASTER_PASSWORD='replication_password'; START SLAVE; SHOW SLAVE STATUS\G; ``` 上述脚本里的参数值应该依据实际情况调整,特别是 LOG_FILE 和 LOG_POS 参数要匹配当前 Master 上的状态[^2]。 #### 审核配置文件 最后不要忘记核查 `/etc/my.cnf` 中的相关配置项,比如 server-id 是否唯一,bin-log 功能已开启等。对于 Slave 节点来说,建议启用只读模式以防止意外的数据更改[^4]: ```ini server_id=20 log-bin=/data/mysql/mysql-bin read_only=ON ``` 通过以上措施一般能有效处理 MySQL 复制过程中出现的 2061 错误。当然具体问题还需结合 SHOW SLAVE STATUS 输出的信息进一步分析定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值