错误:在MySQL中执行主从复制时“无法初始化主信息结构”

时间:2011-02-17 13:22:04

标签: mysql replication master slave

我正在尝试为MySQL进行Master Slave Replication。当我输入以下命令时:

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;

它会抛出以下错误:

  

ERROR 1201(HY000):不能   初始化主信息结构;更多   可以在中找到错误消息   MySQL错误日志

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:142)

尝试重置它,它有魔力!从SLAVE MYSQL命令类型:

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;

答案 1 :(得分:5)

请检查几件事:

1)确保Master的/etc/my.cnf实际设置了server_id

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

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

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

原因如下:与#1相同的原因

3)确保Master的/etc/my.cnf中的server_id与Slave的/etc/my.cnf中的server_id不同

原因如下:与#1相同的原因

作为旁注:如果您设置了多个从站,请确保每个从站与其主站及其同级从站具有不同的server_id。

原因如下:示例

有2个奴隶的主人 MASTER有server_id 1
SLAVE1有server_id 2
SLAVE2有server_id 2

复制将在SLAVE2上变得非常缓慢,因为兄弟从属具有相同的server_id。事实上,它将稳步落后,赶上休息,处理一些SQL语句。这是主服务器有一个或多个具有相同server_ids的从服务器的错误。这是一个在任何地方都没有真正记录的问题。 我一生中见过这几十次。

答案 2 :(得分:1)

我有一个非常接近的东西,并且得到了相同的错误消息。 复制运行正常,重新启动mariadb->“无法打开中继日志”

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

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

尝试lsof | wc并将/etc/systemd/system.conf和/etc/systemd/user.conf

中的DefaultLimitNOFILE增大为65535

答案 3 :(得分:0)

如果没有其他帮助,并且您确信所有设置均正确,则必须删除此文件:

    /var/lib/mysql/<relay_logname>-<connection>.info 

之后,执行上述“ CHANGE MASTER”命令