45

我正在尝试为 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;

它引发以下错误:

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

任何帮助将不胜感激。

4

4 回答 4

173

尝试重置它,它很神奇!ON SLAVE THE 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;
于 2012-03-29T21:10:03.887 回答
6

请检查几件事:

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

原因如下:复制依赖于 server_id。每当执行查询并记录在 master 的二进制 log 中时,master 的 server_id 都会被记录下来。默认情况下,如果 /etc/my.cnf 中未定义 server_id,则 server_id 默认为 1。但是,MySQL 复制规则要求在主服务器的 /etc/my.cnf 中显式定义 server_id。此外,对于任何给定的从站,mysqld 在从中继日志中读取 SQL 语句时检查它的 server_id,并确保它与从站的 server_id 不同。这就是 MySQL 复制知道执行该 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_id 的从服务器。这是一个在任何地方都没有真正记录的问题。在我的一生中,我已经看过几十次了。

于 2011-02-17T20:49:43.837 回答
1

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

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

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

试试 lsof | wc 并在 /etc/systemd/system.conf 和 /etc/systemd/user.conf 中将 DefaultLimitNOFILE 增加到 65535

于 2019-10-19T20:17:54.437 回答
0

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

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

之后执行如上所述的“CHANGE MASTER”命令

于 2020-10-26T13:23:33.027 回答