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

Posted

技术标签:

【中文标题】错误:在 MySQL 中进行主从复制时“无法初始化主信息结构”【英文标题】:Error: "could not initailize master info structure" while doing Master Slave Replication in MySQL 【发布时间】:2011-06-29 02:33:01 【问题描述】:

我正在尝试为 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错误日志

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

尝试重置它,它确实很神奇! 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;

【讨论】:

这是解决方案,在我的情况下,在从服务器中使用错误的 server_id 启动从服务器后发生,在重置之前停止和启动不起作用。【参考方案2】:

请检查几件事:

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 的从服务器的错。这是一个在任何地方都没有真正记录的问题。 在我的一生中,我已经看过几十次了。

【讨论】:

感谢 RolandoMySQLDBA...但我在 /etc/mysql/my.cnf 文件中已经有不同的主从 ID(因为两个系统都有 ubuntu 作为操作系统)【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

以上是关于错误:在 MySQL 中进行主从复制时“无法初始化主信息结构”的主要内容,如果未能解决你的问题,请参考以下文章

开启GTID主从同步出现1236错误问题

关于mysql 主从复制的错误

Mysql主从扩展之问题及解决方法

MySQL主从复制遇到错误的处理办法

MySQL主从复制遇到的错误及解决方法

Mysql -- 主从复制(主从同步)