修改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-1001
从库1101-200101
从库2201-300201
备用库301-400301

五、注意事项

  1. ID唯一性:整个复制拓扑中每个实例的server_id必须唯一

  2. 取值范围:1到4294967295之间的整数

  3. 动态修改限制

    • 5.7+版本可动态修改:SET GLOBAL server_id=新ID;

    • 但必须同时修改配置文件保证重启后生效

  4. 修改影响

    • 会断开现有复制连接

    • 需要重新获取二进制日志位置

六、自动化脚本示例

#!/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

七、故障排查

如果复制无法启动:

  1. 检查错误日志:

    sudo tail -n 50 /var/log/mysqld.log
  2. 验证主库连接:

    mysql -h 主库IP -u repl_user -p
  3. 检查防火墙规则:

    sudo iptables -L -n | grep 3306



登录后方可回帖