Skip to main content

Mysql主从复制,ip地址变化后的处理

在 Ubuntu 14.04 + MySQL 5.5 的环境下,如果两台虚拟服务器的 IP 地址发生变化,主从复制可能会失效,因为 MySQL 复制配置通常依赖于 IP 地址或主机名。因此,需要手动调整配置并重新建立主从复制。以下是详细步骤:
1. 确认新的 IP 地址

在两台服务器上执行以下命令,获取新的 IP 地址:

ip a

假设:

    主服务器 (Master) 新 IP:192.168.1.100
    从服务器 (Slave) 新 IP:192.168.1.101

2. 修改 MySQL 主从配置
(1)修改 Master 配置

编辑 MySQL 配置文件:

sudo vi /etc/mysql/my.cnf

检查或添加以下内容:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = your_database   # 需要复制的数据库
bind-address = 192.168.1.100  # 修改为新 IP

然后重启 MySQL:

sudo service mysql restart

在 MySQL 主服务器上,重新授权从服务器访问:

GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'192.168.1.101' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

(2)修改 Slave 配置

编辑从服务器的 MySQL 配置:

sudo vi /etc/mysql/my.cnf

修改以下内容:

[mysqld]
server-id = 2
relay-log = mysql-relay-bin
replicate-do-db = your_database   # 需要复制的数据库
bind-address = 192.168.1.101  # 修改为新 IP

然后重启 MySQL:

sudo service mysql restart

3. 重新配置 Slave

登录从服务器的 MySQL:

mysql -u root -p

停止复制:

STOP SLAVE;

重设主服务器信息:

CHANGE MASTER TO
    MASTER_HOST='192.168.1.100',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='your_password',
    MASTER_LOG_FILE='mysql-bin.000001',  -- 请使用 SHOW MASTER STATUS 查看的最新 binlog 文件
    MASTER_LOG_POS=107;                  -- 请使用 SHOW MASTER STATUS 查看的最新 Position

启动复制:

START SLAVE;

4. 检查主从同步状态

在从服务器上执行:

SHOW SLAVE STATUS\G

关键检查项:

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Seconds_Behind_Master: 0(或接近 0)

如果 Slave_IO_Running 或 Slave_SQL_Running 不是 Yes,可以查看 Last_Error 进行排查。
5. 设置主机名绑定(可选,防止 IP 变更问题)

如果 IP 可能再次变动,建议使用主机名代替 IP 地址:

    在 /etc/hosts 文件中添加:

    192.168.1.100    mysql-master
    192.168.1.101    mysql-slave

    在 MySQL 的 CHANGE MASTER TO 语句中使用 mysql-master 代替 IP。

总结

    确认新的 IP 地址,并修改 MySQL 配置文件。
    重新授权从服务器的访问权限。
    在 Slave 端重新配置 CHANGE MASTER TO。
    启动 Slave 并检查同步状态。
    (可选)使用主机名绑定,避免 IP 变更影响。

这样,你的 MySQL 5.5 主从复制应该可以恢复正常运行。

实际操作案例,仅配置从服务器:

当你的 MySQL 主服务器 IP 从 192.168.18.27 更改为 192.168.6.27 后,为了确保主从复制继续正常工作,你需要在从服务器上重新配置复制源的主机地址。下面是操作步骤:


修改主从复制配置的正确步骤

1. 停止从服务器复制线程

在从服务器上执行:

STOP SLAVE;

2. 修改主服务器地址

重新设置主服务器的 IP 地址(注意保留之前获取的 MASTER_LOG_FILEMASTER_LOG_POS 信息):

CHANGE MASTER TO 
MASTER_HOST='192.168.6.27',
MASTER_PORT=3306,
MASTER_USER='replicator',
MASTER_PASSWORD='Passw0rd',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=867,
GET_MASTER_PUBLIC_KEY=1;

✅ 说明:

  • GET_MASTER_PUBLIC_KEY=1 是 MySQL 8+ 的特性,MySQL 5.x 不需要。

  • 如果你使用的是 MySQL 5.5 / 5.6,忽略 GET_MASTER_PUBLIC_KEY=1


3. (可选)保留原来的延迟设置(如果需要)

CHANGE MASTER TO MASTER_DELAY = 3600;

4. 重新启动复制

START SLAVE;

5. 验证从服务器状态

SHOW SLAVE STATUS\G;

重点查看以下字段:

  • Slave_IO_Running: Yes

  • Slave_SQL_Running: Yes

  • Seconds_Behind_Master: 0 或正值


🔁 如有主服务器绑定了 IP,记得确认监听地址

如果主服务器上 MySQL 绑定了旧 IP,确保它现在绑定的是 0.0.0.0192.168.6.27

编辑主服务器 /etc/mysql/my.cnf/etc/my.cnf 中的 bind-address

bind-address = 0.0.0.0

然后重启 MySQL 服务:

sudo systemctl restart mysql

如有其它限制(如防火墙、iptables、主从网段隔离等),请确保从服务器能正常连接到 192.168.6.27:3306