【MySQL】基于位点复制的一主两从架构部署
在 MySQL 高可用架构中,基于位点的主从复制是经典方案 —— 通过 “Binlog 文件名 + 位置” 精准定位数据同步起点,实现一主多从的数据冗余与读写分离。本文将详细拆解 CentOS 环境下一主两从架构的部署流程,涵盖环境准备、数据备份、复制配置全环节,附避坑指南。
一、架构规划与环境准备
1. 服务器规划
采用 3 台 CentOS 虚拟机搭建集群,IP 与角色分配如下:
| 角色 | IP 地址 | 主机名 |
| 主库(Master) | 192.168.184.151 | maria-01 |
| 从库 1(Slave1) | 192.168.184.152 | maria-02 |
| 从库 2(Slave2) | 192.168.184.153 | maria-03 |
2. 虚拟机克隆与网络配置
(1)克隆从库虚拟机
- 关闭主库虚拟机,右键选择「管理」→「克隆」,创建完整克隆(确保数据独立);
- 分别启动两台从库虚拟机,修改网络配置文件:
vim /etc/sysconf/network-scripts/ifcfg-ens33
3. 按规划修改IPADDR(如从库 2 设为 192.168.184.153),保存后重启网卡:
systemctl restart network
此时,如果出现
network.service启动失败,报错RTNETLINK answers: File exists,这通常是由于网络配置冲突或者残留的网络相关进程、文件等问题导致的。解决方法:systemctl stop NetworkManager # 临时关闭NetworkManager systemctl start network # 启动network服务 systemctl start NetworkManager # 重启NetworkManager
4. 验证 IP 配置:ip a 确认 IP 地址生效。
ip a # 应显示192.168.184.153
(2)修改主机名
以从库 2 为例,设置主机名并生效:
hostnamectl set-hostname maria-03
su - # 刷新环境
重启终端后,3 台服务器应能相互 ping 通。
3. 统一 MySQL 配置(关键)
三台机器均需关闭 GTID 模式、开启从库日志同步(log-slave-updates),确保复制链完整,3 台服务器均需修改my.cnf:
vim /data/mysql/conf/my.cnf
添加 / 修改以下配置:
# 关闭GTID(位点复制需禁用)
gtid_mode=off
# 注释GTID一致性校验(避免冲突)
# enforce_gtid_consistency=on
# 开启从库日志更新(级联架构必需)
log-slave-updates=1
重启 MySQL 使配置生效:
/etc/init.d/mysql.server restart
二、一主两从架构搭建核心步骤
1. 主库配置:创建复制用户与全量备份
(1)创建复制专用用户
登录主库(192.168.184.151),执行 SQL 创建授权用户:
CREATE USER 'repl'@'%' identified WITH mysql_native_password BY 'Uid_dQc63';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; # 授予复制权限
(2)全量备份主库数据
使用 Percona Xtrabackup 工具备份(需提前安装percona-xtrabackup):
# 创建备份目录
mkdir -p /data/backup
cd /data/backup
# 流式备份(适合跨服务器传输)
xtrabackup --defaults-file=/data/mysql/conf/my.cnf -uroot -p --backup --stream=xbstream --target-dir=./ > /data/backup/xtrabackup.xbstream
2. 从库配置:恢复备份与复制初始化
(1)传输备份文件到从库
- 两台从库均创建恢复目录:
mkdir /data/backup/recover
- 将主库备份文件传输到从库(以从库 1 为例):
scp /data/backup/xtrabackup.xbstream 192.168.184.152:/data/backup/recover
(2)恢复备份数据
- 验证磁盘空间(避免恢复失败):
df -TH # 确保/data分区剩余空间大于备份文件大小
2. 停止从库 MySQL,清空原有数据(⚠️生产环境需确认数据无用):
/etc/init.d/mysql.server stop
rm /data/mysql/data/* -rf
rm /data/mysql/binlog/* -rf
3. 解压并恢复备份:
cd /data/backup/recover
xbstream -x < xtrabackup.xbstream # 解压备份
xtrabackup --prepare --target-dir=./ # 预处理备份(确保数据一致性)

4. 恢复数据到 MySQL 数据目录:
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=./ # 恢复到数据目录
5. 修复权限并启动从库:
chown -R mysql.mysql /data/mysql # 授予MySQL用户权限
/etc/init.d/mysql.server start
ps -ef | grep mysql # 验证MySQL已启动

3. 配置主从复制(核心:位点定位)
(1)获取主库备份位点
从库恢复目录中,查看备份时记录的 Binlog 位点:
cat /data/backup/recover/xtrabackup_binlog_info
输出示例:mysql-bin.000013 196(记录文件名和位置,后续关键配置)。

(2)从库配置复制关系
登录从库 MySQL,执行以下 SQL(替换位点信息):
stop slave; # 停止现有复制(首次部署可忽略)
CHANGE MASTER TO
MASTER_HOST='192.168.184.151', # 主库IP
MASTER_USER='repl', # 复制用户
MASTER_PASSWORD='Uid_dQc63', # 复制密码
MASTER_LOG_FILE='mysql-bin.000013', # 备份时的Binlog文件名
MASTER_LOG_POS=196; # 备份时的Binlog位置
start slave; # 启动复制

(3)验证复制状态
执行以下命令检查复制是否正常:
show slave status\G

关键校验项:
Slave_IO_Running: Yes(IO 线程正常)Slave_SQL_Running: Yes(SQL 线程正常)- 无
Seconds_Behind_Master(或数值较小,代表同步延迟)
三、同步测试与验证
1. 主库写入测试数据
use maria; # 切换到业务数据库
create table repl_test(id int); # 创建测试表
insert into repl_test select 1; # 插入数据
2. 从库验证同步结果
登录任意从库,执行查询:
use maria;
select * from repl_test;
若返回id=1,说明主从数据同步成功。

四、部署注意事项
- 位点准确性:备份时的 Binlog 文件名和位置必须准确,否则会导致同步失败;
- 权限配置:从库恢复后需修复目录权限(
chown -R mysql:mysql),否则 MySQL 无法启动; - 网络连通性:确保 3 台服务器防火墙开放 MySQL 端口(默认 3306),或直接关闭防火墙;
- 生产环境建议:
- 备份文件建议加密传输,避免密码泄露;
- 定期监控复制状态,避免同步中断;
- 从库可开启只读模式(
read_only=1),防止误写。
总结
基于位点的一主两从架构部署核心在于 “精准定位同步起点”,通过 Xtrabackup 全量备份 + Binlog 位点同步,实现数据一致性复制。该架构适用于中小规模业务,可提升读性能(从库分担查询压力)和数据可用性(主库故障时从库可切换)。后续可结合 Keepalived 实现主从自动切换,进一步提升架构高可用性。



