mysql with a as_mysql 5.7 server_uuid 相同导致slave故障问题解决

当添加新的MySQL 5.7 slave数据库时,由于server_uuid相同,主从同步出现错误1236。尽管server_id不同,但auto.cnf中的server_uuid相同导致问题。解决方法是删除或移动auto.cnf,重启MySQL以生成新的server_uuid。
摘要由CSDN通过智能技术生成

问题

今天添加了一个mysql5.7的 slave数据库,部署完成之后,启动新部署的slave一切正常,但是收到了老slave数据库的主从同步报警。

登陆故障数据库查询到,Mysql主从同步报错如下

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'A slave with the same server_uuid/server_id as this slave has connected to the master; the first event 'mysql-bin.003459' at 4, the last event read from '/data/dblogs/binlog_3306/mysql-bin.003466' at 445747689, the last byte read from '/data/dblogs/binlog_3306/mysql-bin.003466' at 445747689.'

问题原因

一开始感觉这种现象应该是server-id相同导致,经过多次确认集群中server-id确实不一样。

sys_manage@10.1.13.12: (none) 09:58:41>show variables like 'server_id';

+---------------+---------+

| Variable_name | Value |

+---------------+---------+

| server_id | 1217423 |

+---------------+---------+

1 row in set (0.00 sec)

sys_manage@10.1.13.14: (none) 09:58:23>show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id | 12174 |

+---------------+-------+

1 row in set (0.00 sec)

这时又个新的发现server_uuid 是相同的

sys_manage@10.1.13.14: (none) 09:59:45>show variables like 'server_uuid';

+---------------+--------------------------------------+

| Variable_name | Value |

+---------------+--------------------------------------+

| server_uuid | 851bc22f-c0ce-11e6-a3bf-1866dae7e3f0 |

+---------------+--------------------------------------+

1 row in set (0.00 sec)

sys_manage@10.1.13.12: (none) 10:00:42>show variables like 'server_uuid';

+---------------+--------------------------------------+

| Variable_name | Value |

+---------------+--------------------------------------+

| server_uuid | 851bc22f-c0ce-11e6-a3bf-1866dae7e3f0 |

+---------------+--------------------------------------+

1 row in set (0.00 sec)

错误原因:

我的新slave添加是直接把一个旧的slave停掉,然后拷贝到新的机器上启动,结果auth.cnf里面保存的uuid仍然是slave1的uuid,导致再向master申请binlog时master神经错乱,无法识别两个slave。

如下内容为网络查询总结:

MySQL 5.6 用 128 位的 server_uuid 代替了原本的 32 位 server_id 的大部分功能。原因很简单,server_id 依赖于 my.cnf 的手工配置,有可能产生冲突 —— 而自动产生 128 位 uuid 的算法可以保证所有的 MySQL uuid 都不会冲突。

在首次启动时 MySQL 会调用 generate_server_uuid() 自动生成一个 server_uuid,并且保存到 auto.cnf 文件 —— 这个文件目前存在的唯一目的就是保存 server_uuid。

在 MySQL 再次启动时会读取 auto.cnf 文件,继续使用上次生成的 server_uuid。

使用 SHOW 命令可以查看 MySQL 实例当前使用的 server_uuid​:

SHOW GLOBAL VARIABLES LIKE 'server_uuid';

它是一个 MySQL 5.6 global variables

全局唯一的 server_uuid 的一个好处是:可以解决由 server_id 配置冲突带来的 MySQL 主备复制的异常终止

在 MySQL 5.6,Slave 向 Master 申请 binlog 时,会首先发送自己的 server_uuid,Master 用 Slave 发送的 server_uuid 代替 server_id (MySQL 5.6 之前的方式)作为 kill_zombie_dump_threads 的参数,终止冲突或者僵死的 BINLOG_DUMP 线程。

解决方法

既然我们知道故障原因是server_uuid 相同导致,而且server_uuid是在mysql启动的时候生成的,那么我们就可以,进入mysql的数据目录,找到auto.cnf文件,将此文件移动走,然后重启mysql生成新的server_uuid 即可。

喜欢 (3)or分享 (0)

当出现"A slave with the same server_uuid/server_id as this slave has connected to t"的错误时,意味着有两个或多个从服务器使用相同server_uuidserver_id连接到了主服务器。 在MySQL复制中,每个从服务器都有唯一的server_uuidserver_id用于标识它们自己。这些标识符用于复制中的身份验证和同步过程。当出现一个从服务器与其他从服务器共享相同server_uuidserver_id时,这会造成冲突并导致错误发生。 要解决问题,我们需要确保每个从服务器都有其唯一的server_uuidserver_id,并且确保它们与主服务器上的相应设置保持一致。可通过以下步骤解决问题: 1. 首先,确定从服务器上的server_uuidserver_id。可以在从服务器的my.cnf配置文件或通过执行以下命令获取: SELECT @@server_uuid; SELECT @@server_id; 2. 检查其他从服务器是否使用了相同server_uuidserver_id。可以在每个从服务器上执行相同的命令并进行比较。 3. 如果发现重复的server_uuidserver_id,需要更新其中一个或所有从服务器的配置,以确保它们使用唯一的标识符。可以通过编辑每个从服务器的my.cnf配置文件来更改它们,修改server_uuidserver_id的值,并确保与其他从服务器不同。 4. 重新启动每个从服务器,使更改生效。 5. 在主服务器上执行RESET SLAVE语句,以清除与从服务器的复制关系。然后重新配置每个从服务器并重新建立复制连接。 通过以上步骤,可以确保每个从服务器都具有唯一的server_uuidserver_id,并且不会发生"A slave with the same server_uuid/server_id as this slave has connected to t"错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值