首页 > 数据库 >MySQL复制常见报错处理【转】

MySQL复制常见报错处理【转】

时间:2022-12-30 12:01:43浏览次数:30  
标签:slave MySQL 复制 报错 mysql test 从库 id

在日常工作中,笔者遇到过很多MySQL主从复制报错的情况,这篇文章就来聊一聊常见的一些复制报错,以及处理办法。

1 server id 重复

这个在我们刚接触主从复制的时候可能会犯的错误,也就是主从的 server_id 配置成相等的了,show slave status\G 会报如下错误:
图片

报错中也提示了:主和从有相等的 server id。

解决办法:
修改主从的 server_id,建议改成IP后两段的组合。
比如 IP 是192.168.11.11。那 server_id 就定义为 1111,通常情况同一架构中的 server_id 重复的概率就小很多了。

2 端口不通

主从端口不通,通常 show slave status\G 报错如下:
图片

其中:
Slave_IO_State 显示为:Connection to master;Slave_IO_Running 显示为:Connection;Seconds_Behind_Master 显示为:NULL。

解决办法:
将主从端口调通,保证能互相 telnet 通对方的 3306 端口。

3 主库要新增的内容在从库已经有了

可以先模拟出这种报错(注意!只能在自己的测试环境操作)。在从库上新建一个库:

create database martin_test;

再到主库执行同样的建库语句:

create database martin_test;

再去从库执行 show slave status\G:
图片Last_Error 中提示了,不能再创建 martin_test 库,因为已经存在了。


解决办法:从库跳过这条记录。
如果是 GTID 模式:假如 Executed_Gtid_set 为:

65c07f5e-1e37-11ed-b657-fa163e0d61f4:1-10139

则恢复操作为:

mysql> stop slave;mysql> set @@session.gtid_next='65c07f5e-1e37-11ed-b657-fa163e0d61f4:10140';mysql> begin;commit;mysql> set session gtid_next='AUTOMATIC';mysql> start slave;mysql> show  slave status\G

session.gtid_next 后面接的是 Executed_Gtid_set 下一个值。
如果是位点模式:

stop slave;set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;start slave;show slave status\G

4 主要更新的记录,从库没有

可以先模拟出这种报错(注意!只能在自己的测试环境操作)。创建测试表并写入数据:

CREATE TABLE test_repl (id int NOT NULL AUTO_INCREMENT,a int NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB CHARSET=utf8mb4;insert into test_repl values (1,1),(2,2);

在从库删除一条记录

delete from test_repl where id=1;

再到主库更新 id =1 的记录

update test_repl set a=2 where id=1;

从库执行 show slave status\G图片提示要更新的记录不存在。

解决办法:我们可以根据上图的 Relay_Log_File 和 Relay_Log_Pos(分表对应的是:mysql-relay-bin.000014 和 1112 )来解析出报错的 SQL 语句。

mysqlbinlog  mysql-relay-bin.000014 --start-position=1112 --base64-output=decode-rows -v >/tmp/1110.sql

可以看到如下内容:图片
可以找到原记录,原记录就是 WHERE 后面对应的值,然后在MySQL中执行

insert into test_repl select 1,1;stop slave;start slave;

这样主从同步就恢复了。

当然,这只是众多复制报错的一部分,如果你遇到过其他的一些复制报错,欢迎在文章下方留言一起讨论。

转自

MySQL复制常见报错处理
https://mp.weixin.qq.com/s?__biz=MzIyOTUzNjgwNg==&mid=2247484754&idx=1&sn=842673f19359cd9146bc40a04c2890a7&chksm=e840601bdf37e90d13b24c7f4a77bafb2f4c4bb181e6126315b45d5987ce40656f88333b4ff5&mpshare=1&scene=23&srcid=1230c34pPtXTZouNGQUINca3&sharer_sharetime=1672357654250&sharer_shareid=d4c90af7aec01f0a93659ebb355381a9#rd

标签:slave,MySQL,复制,报错,mysql,test,从库,id
From: https://www.cnblogs.com/paul8339/p/17014541.html

相关文章