在 Linux 系统中,搭建 MySQL 主从复制(Master-Slave Replication)是一个常见的高可用和数据备份方案。以下是搭建 MySQL 主从复制的步骤和常用命令,适用于大多数 Linux 发行版(如 Ubuntu、CentOS 等)。
✅ 一、准备工作
1. 确保 MySQL 服务已安装
在主服务器和从服务器上安装 MySQL:
sudo apt update
sudo apt install mysql-server
或
sudo yum install mysql-server
2. 配置主服务器(Master)
1.1 启动 MySQL 服务
sudo systemctl start mysql
sudo systemctl enable mysql
1.2 修改主服务器配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)
[mysqld]
server-id=1
log-bin=mysql-bin # 启用二进制日志
log-bin-index=mysql-bin.log # 指定二进制日志文件
binlog_format=ROW # 使用 ROW 格式
binlog-ignore-db=mysql # 忽略 mysql 数据库(可选)
1.3 重启 MySQL 服务
sudo systemctl restart mysql
1.4 创建用户并授权
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
1.5 获取主服务器的二进制日志信息
SHOW MASTER STATUS;
输出示例:
+------------------+--------------------+--------------+------------------+
| File | Position | Binlog_Do_DB |
+------------------+--------------------+--------------+
| mysql-bin.000001 | 100 | mysql |
+------------------+--------------------+--------------+
记录 File 和 Position,用于从服务器配置。
✅ 二、配置从服务器(Slave)
2.1 启动 MySQL 服务
sudo systemctl start mysql
sudo systemctl enable mysql
2.2 修改从服务器配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)
[mysqld]
server-id=2
log-bin=mysql-bin # 启用二进制日志
log-bin-index=mysql-bin.log # 指定二进制日志文件
binlog_format=ROW # 使用 ROW 格式
binlog-ignore-db=mysql # 忽略 mysql 数据库(可选)
2.3 设置主服务器信息
CHANGE MASTER TO
MASTER_HOST='master_ip_address',
MASTER_USER='repl_user',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=100;
2.4 启动从服务器
sudo systemctl start mysql
2.5 开始复制
sudo mysqlslum -u repl_user -p your_password
或者使用命令行:
sudo systemctl restart mysql
✅ 三、验证主从复制
1. 在主服务器上查看二进制日志
SHOW MASTER STATUS;
2. 在从服务器上查看复制状态
SHOW SLAVE STATUS G;
输出中应包含 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes。
✅ 四、常见问题与解决
| 问题 | 解决方案 |
|---|---|
| 主从服务器 IP 不一致 | 修改 MASTER_HOST 为正确的 IP 地址 |
| 无法连接主服务器 | 检查防火墙规则,确保 3306 端口开放 |
| 主从同步延迟 | 增加 log-bin 的大小,或优化主服务器性能 |
| 从服务器无法启动 | 检查 MySQL 配置文件是否正确,确保 server-id 不冲突 |
✅ 五、脚本化(可选)
1. 主服务器配置脚本(setup_master.sh)
#!/bin/bash
# 主服务器配置
echo "Setting up Master..."
sudo sed -i 's/# server-id=1/server-id=1/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo sed -i 's/# log-bin=mysql-bin/log-bin=mysql-bin/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo sed -i 's/# binlog_format=ROW/binlog_format=ROW/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql
# 创建用户并授权
mysql -u root -p -e "CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES;"
# 获取主服务器状态
mysql -u root -p -e "SHOW MASTER STATUS;"
2. 从服务器配置脚本(setup_slave.sh)
#!/bin/bash
# 从服务器配置
echo "Setting up Slave..."
sudo sed -i 's/# server-id=2/server-id=2/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo sed -i 's/# CHANGE MASTER TO/CHANGE MASTER TO/' /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql
# 设置主服务器信息
mysql -u root -p -e "CHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='repl_user', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=100;"
# 启动从服务器
sudo systemctl start mysql
✅ 六、总结
| 步骤 | 说明 |
|---|---|
| 安装 MySQL | 安装 MySQL 服务和二进制日志 |
| 配置主服务器 | 设置 server-id、log-bin、repl_user |
| 配置从服务器 | 设置 server-id、log-bin、repl_user、MASTER_HOST |
| 验证 | 使用 SHOW SLAVE STATUS 验证同步状态 |
如需进一步优化(如主从延迟监控、故障切换等),可以结合 mysql-monitor、rsync、Nagios 等工具进行管理。
如需针对特定 Linux 发行版(如 Ubuntu、CentOS)的详细配置,也可以告诉我,我可以提供更具体的命令和配置。

