修改MySQL从库server_id的完整指南
By 水木神風
at 2025-07-23 • 0人收藏 • 343人看过
修改MySQL从库server_id的完整指南
一、修改前的准备工作
1. 查看当前server_id
SHOW VARIABLES LIKE 'server_id';
2. 确认主从复制状态
SHOW SLAVE STATUS\G
记录Master_Log_File和Read_Master_Log_Pos值
二、安全修改步骤
1. 停止从库复制
STOP SLAVE;
2. 修改配置文件
编辑my.cnf文件(通常位于/etc/my.cnf或/etc/mysql/my.cnf):
sudo vi /etc/my.cnf
找到[mysqld]段并修改:
[mysqld] server_id = 新ID号 # 必须与主库和其他从库不同
3. 重启MySQL服务
sudo systemctl restart mysqld # 或 sudo service mysql restart
4. 验证新server_id
SHOW VARIABLES LIKE 'server_id';
三、恢复主从复制
1. 重新配置复制
CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl_user', MASTER_PASSWORD='密码', MASTER_LOG_FILE='之前记录的日志文件', MASTER_LOG_POS=之前记录的位置;
2. 启动复制
START SLAVE;
3. 验证复制状态
SHOW SLAVE STATUS\G
确认:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0(或逐渐减小)
四、server_id设置规范
| 服务器角色 | server_id范围 | 示例 |
|---|---|---|
| 主库 | 1-100 | 1 |
| 从库1 | 101-200 | 101 |
| 从库2 | 201-300 | 201 |
| 备用库 | 301-400 | 301 |
五、注意事项
ID唯一性:整个复制拓扑中每个实例的server_id必须唯一
取值范围:1到4294967295之间的整数
动态修改限制:
5.7+版本可动态修改:SET GLOBAL server_id=新ID;
但必须同时修改配置文件保证重启后生效
修改影响:
会断开现有复制连接
需要重新获取二进制日志位置
六、自动化脚本示例
#!/bin/bash
# 修改server_id脚本(需root权限)
NEW_ID=$1
CONF_FILE="/etc/my.cnf"
# 备份原配置
cp $CONF_FILE ${CONF_FILE}.bak.$(date +%F)
# 修改配置
sed -i "/^\[mysqld\]/,/^\[/ s/^server_id.*/server_id = $NEW_ID/" $CONF_FILE
# 重启服务
systemctl restart mysqld
# 验证
mysql -e "SHOW VARIABLES LIKE 'server_id';"使用方式:sudo ./change_server_id.sh 101
七、故障排查
如果复制无法启动:
检查错误日志:
sudo tail -n 50 /var/log/mysqld.log
验证主库连接:
mysql -h 主库IP -u repl_user -p
检查防火墙规则:
sudo iptables -L -n | grep 3306
登录后方可回帖