MySQL 主从同步完整配置示例
以下是 MySQL 主从同步完整配置示例(基于 Linux 系统),包含主库和从库的配置步骤:
一、主库(Master)配置
1. 安装 MySQL(以 CentOS 为例)
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
2. 修改主库配置文件 /etc/my.cnf
[mysqld]
# 唯一 Server ID(主从需不同)
server-id=1
# 启用二进制日志(必须)
log-bin=mysql-bin
# 指定日志存储位置(可选)
binlog-dir=/var/lib/mysql
3. 重启 MySQL
systemctl restart mysqld
4. 创建复制用户并授权
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
5. 查看主库状态(记录 File 和 Position)
SHOW MASTER STATUS;
输出示例:
File: mysql-bin.000001
Position: 120
二、从库(Slave)配置
1. 安装 MySQL
yum install -y mysql-server
systemctl start mysqld
systemctl enable mysqld
2. 修改从库配置文件 /etc/my.cnf
[mysqld]
# 唯一 Server ID(与主库不同)
server-id=2
# 禁用二进制日志(可选)
skip-log-bin
# 设置为只读(推荐)
read-only=1
3. 重启 MySQL
systemctl restart mysqld
4. 导入主库数据(初次同步)
方法 1:通过物理拷贝数据(推荐快速初始化)
# 停止从库 MySQL
systemctl stop mysqld# 删除原有数据目录(谨慎操作!)
rm -rf /var/lib/mysql/*# 从主库复制数据(需主库执行 FLUSH TABLES WITH READ LOCK)
scp -r user@master:/var/lib/mysql /var/lib/# 解锁主库
mysql -u root -p
UNLOCK TABLES;# 启动从库 MySQL
systemctl start mysqld
方法 2:通过 SQL 导出导入
# 在主库执行
mysqldump -u root -p --all-databases --triggers --events > all_db.sql
scp all_db.sql user@slave:/root/# 在从库执行
mysql -u root -p < /root/all_db.sql
三、配置从库复制
1. 连接主库并配置复制
CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='replica_user',MASTER_PASSWORD='your_password',MASTER_LOG_FILE='mysql-bin.000001', -- 主库 SHOW MASTER STATUS 的 FileMASTER_LOG_POS=120; -- 主库 SHOW MASTER STATUS 的 Position
2. 启动从库复制进程
START SLAVE;
3. 检查从库状态
SHOW SLAVE STATUS\G
关键字段应满足:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
四、测试验证
-
在主库创建测试表
CREATE DATABASE test; USE test; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(10)); INSERT INTO t1 VALUES (1, 'master');
-
在从库查看同步结果
USE test; SELECT * FROM t1; # 应显示主库插入的数据
五、常见问题排查
- 主从网络不通:检查防火墙(
firewall-cmd
或iptables
)是否开放 3306 端口。 - 权限错误:确保从库使用
REPLICATION SLAVE
权限的用户连接主库。 - 数据不一致:重新导入数据或检查
master-log
和relay-log
。
附:SELinux 配置(如启用)
# 临时关闭 SELinux(仅测试环境)
setenforce 0# 永久关闭(修改 /etc/selinux/config)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
通过以上步骤,您可以完成完整的 MySQL 主从同步配置。