惊天揭秘:我的MySQL从库竟是我自己!?
2023-04-20 21:02:05
MySQL 主从复制的闹剧:从库身份危机
在数据库领域,MySQL 的主从复制技术备受推崇,它提供了一系列强大功能,例如数据备份、负载均衡和故障转移。然而,在实际操作中,主从复制也可能会出现各种各样的问题,例如身份错乱。本文将深入探讨 MySQL 主从复制中一个常见的闹剧:从库竟然把自己当成了主库。
现象还原
为了便于理解,我们将在本地环境中重现此异常现象。我们建立了一个简单的主从复制系统,主库 IP 地址为 192.168.1.100,端口号为 3306,从库 IP 地址为 192.168.1.101,端口号为 3307。
当我们在主库上执行以下命令时,我们期望从库能够将自己的 IP 地址和端口号更新为主库的对应值:
CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_PORT=3307, MASTER_USER='repl', MASTER_PASSWORD='repl_pass';
然而,从库的行为却令人大跌眼镜,它竟然将自己的 IP 地址和端口号更新为了自己的值,即:
CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_PORT=3307, MASTER_USER='repl', MASTER_PASSWORD='repl_pass';
这显然是不可接受的,因为从库不应该将自己作为自己的主库。
分析与解决
经过一番深入调查,我们发现问题的根源在于从库的配置文件 my.cnf 中一个关键参数的设置。在该文件中,我们配置了以下参数:
server-id=2
这个参数指定了从库的服务器 ID,在本例中为 2。而主库的服务器 ID 为 1。当从库将自己的 IP 地址和端口号更新为主库的对应值时,它实际上是将自己的服务器 ID 更新为了主库的服务器 ID。这导致从库错误地认为自己就是主库,从而产生了身份错乱的闹剧。
为了解决这个问题,我们需要将从库的服务器 ID 修改为一个与主库不同的值。例如,我们可以将从库的服务器 ID 设置为 3:
server-id=3
修改完成后,我们再次在主库上执行 CHANGE MASTER TO 命令,从库就能够正确地将自己的 IP 地址和端口号更新为主库的对应值了。
总结
通过对主从复制异常现象的分析,我们了解到了手工搭建 MySQL 主从复制时需要注意的一些关键细节:
- 从库的服务器 ID 必须与主库的服务器 ID 不同。
- 从库的 IP 地址和端口号必须与主库的对应值不同。
- 从库的复制用户必须拥有足够的权限。
- 从库的二进制日志必须开启。
- 从库的 relay log 必须开启。
只要我们注意这些细节,就可以避免出现从库身份错乱的尴尬情况。
常见问题解答
-
为什么从库会将自己当成了主库?
因为从库错误地将自己的服务器 ID 更新为了主库的服务器 ID,导致它误认为自己是主库。 -
如何修改从库的服务器 ID?
可以在从库的配置文件 my.cnf 中设置 server-id 参数。 -
如何确定从库的复制用户是否具有足够的权限?
可以检查从库的复制用户是否拥有 REPLICATION SLAVE 权限。 -
为什么二进制日志和 relay log 必须开启?
因为二进制日志记录了主库上的数据更改,而 relay log 记录了从库上接收到的二进制日志事件。这两者对于主从复制的正常运行至关重要。 -
如果从库无法正确连接到主库该怎么办?
可以检查主库和从库的防火墙设置,确保它们允许相应的端口通信。