首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL从库server-id相同会发生什么情况?

MySQL从库server-id相同会发生什么情况?

作者头像
AsiaYe
发布2020-01-15 15:04:54
2.4K0
发布2020-01-15 15:04:54
举报
文章被收录于专栏:DBA随笔DBA随笔

//

MySQL从库server-id相同会发生什么情况?

//

今天中午,尝试着将线上rds的一套主从复制架构重新给搭建成一主两从的架构,在搭建的过程中,遇到了一些有意思的问题,记录一下:

搭建主从复制的架构图如下:

步骤1,当前复制关系为线上rds和本地ECS的主从关系:

步骤2,由于数据量比较大,通过scp拷贝的方法将ECS上的数据拷贝到另外一台ECS上:

最终想要的结果:

按道理,由于两台ECS的数据是通过物理拷贝的方式进行的,所以他们的数据是一模一样的,包括复制的偏移量都是一样的,这2台ECS(右边的)和线上rds主从关系搭建应该没有问题才对,但是在实际操作的过程中,右侧的ECS没有问题,左侧的ECS出现一个错误,错误信息是:

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 '' at 4, the last event read from '/home/mysql/data3059/mysql/mysql-bin.001815' at 242534245

从错误信息中不难看出,是因为我们第2步中使用了拷贝的方式,导致两个ECS从库拥有相同的Server id和uuid,在MySQL5.7.16的版本中,Server-id是可以支持动态修改的,我们使用下面的SQL进行修改:

mysql> show variables like '%server_id%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| pseudo_server_id | 0     |
| server_id        |   |
| server_id_bits   | 32    |
+------------------+-------+
 rows in set (. sec)

mysql> set global server_id=;  
Query OK,  rows affected (. sec)

修改前后的情况如下:

修改前,右边的复制关系是最新的,是OK的,左侧原本的ECS主从关系断开了。

当我们使用set global的方法修改左侧的server-id为4610,并重新建立复制关系的时候,结果如下:

可以看到,左侧的server-id改成了4310,复制重新建立了,右侧的复制关系又断开了,报错内容跟左边的一致。

到这里,可能有朋友发现了,还有uuid没有改呢,二者的uuid是一样的,是的,实际情况也确实是这样。

于是我们又修改了右侧ECS的uuid值,然后重新启动右侧的ECS实例,搭建复制关系,发现问题已经解决了,实现了我们想要一主多从的结果。

在复制关系更改前后,在master上看slave的信息,如下:

mysql--dba_admin :(none) ::>>show slave hosts;
+------------+------+------+------------+--------------------------------------+
| Server_id  | Host | Port | Master_id  | Slave_UUID                           |
+------------+------+------+------------+--------------------------------------+
|       4610 |      | 4802 | xxxx46 | a22a5b8axxxxxxx-9c4b-00163xxxxxxxd21 |
+------------+------+------+------------+--------------------------------------+
 rows in set (. sec)

mysql--dba_admin :(none) ::>>show slave hosts;
+------------+------+------+------------+--------------------------------------+
| Server_id  | Host | Port | Master_id  | Slave_UUID                           |
+------------+------+------+------------+--------------------------------------+
|       4609 |      | 4306 | xxxx46 | a22a5b8axxxxxxx-9c4b-00163exxxxxxd20 |
+------------+------+------+------------+--------------------------------------+
 rows in set (. sec)

一点总结:

在MySQL中,搭建一主多从的时候,从库的server-id和uuid不能相同,如果新加入的从库设置的server-id或者uuid跟其他从库相同,MySQL并不会直接拒绝加入主从关系,而是将之前的Slave节点进行剔除掉,来保证show slave hosts中一个server-id只对应一个从节点。

有帮助的话还希望点下再看哈

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档