错误:“在MySQL中进行主从复制时,无法使主信息结构变得不完整”

问题描述 投票:41回答:3

我正在尝试为MySQL做主从复制。当我输入以下命令时:

CHANGE MASTER TO MASTER_HOST='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;

它引发以下错误:

错误1201(HY000):无法初始化主信息结构;更多错误消息可以在MySQL错误日志

任何帮助将不胜感激。

mysql replication master slave
3个回答
144
投票
RESET SLAVE;

再次尝试:

CHANGE MASTER TO MASTER_HOST='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;

5
投票
1)确保主服务器的/etc/my.cnf实际设置了server_id

这里是原因:复制依赖于server_id。每当执行查询并将其记录在主服务器的二进制日志中时,主服务器的server_id都会随之记录。默认情况下,如果未在/etc/my.cnf中定义server_id,则server_id默认为1。但是,MySQL Replication规则要求在主服务器的/etc/my.cnf中显式定义server_id。另外,对于任何给定的从属服务器,mysqld在从中继日志中读取该SQL语句的server_id时,都要检查它,并确保它与从属服务器的server_id不同。这就是MySQL Replication知道执行该SQL语句是安全的。如果实施了循环(主-主,多主)复制,则此规则是必需的。

使用sql命令行中的select @@server_id;来检查服务器上的配置。

2)确保从站的/etc/my.cnf实际设置了server_id

这里是原因:与#1相同的原因

3)确保主服务器的/etc/my.cnf中的server_id与从服务器的/etc/my.cnf中的server_id不同

这里是原因:与#1相同的原因

作为旁注:如果您设置多个从属,请确保每个从属与其主服务器和同级从属服务器具有不同的server_id。

这里是原因:示例

具有2个从属的主MASTER具有server_id 1SLAVE1具有server_id 2SLAVE2具有server_id 2

因为同级从属具有相同的server_id,所以复制在SLAVE2上会变得缓慢。实际上,它将稳步落后,休息一下,处理一些SQL语句。这是主机具有一个或多个具有相同server_id的从机的错误。这是一个未在任何地方真正记录的陷阱。我一生中已经看过数十次了。


0
投票
Neo的解决方案首先提供了帮助。

但似乎根本原因是打开文件的限制较小。

尝试lsof | wc并将/etc/systemd/system.conf和/etc/systemd/user.conf中的DefaultLimitNOFILE增大为65535]

© www.soinside.com 2019 - 2024. All rights reserved.