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_FILE
和 MASTER_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.0
或 192.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
。