我正在尝试为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错误日志
任何帮助将不胜感激。
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;
这里是原因:复制依赖于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的从机的错误。这是一个未在任何地方真正记录的陷阱。我一生中已经看过数十次了。
但似乎根本原因是打开文件的限制较小。
尝试lsof | wc并将/etc/systemd/system.conf和/etc/systemd/user.conf中的DefaultLimitNOFILE增大为65535]