我正在尝试为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错误日志
非常感谢任何帮助。
答案 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”命令