【MySQL】基于位点复制的一主两从架构部署

在 MySQL 高可用架构中,基于位点的主从复制是经典方案 —— 通过 “Binlog 文件名 + 位置” 精准定位数据同步起点,实现一主多从的数据冗余与读写分离。本文将详细拆解 CentOS 环境下一主两从架构的部署流程,涵盖环境准备、数据备份、复制配置全环节,附避坑指南。

一、架构规划与环境准备

1. 服务器规划

采用 3 台 CentOS 虚拟机搭建集群,IP 与角色分配如下:

角色IP 地址主机名
主库(Master)192.168.184.151maria-01
从库 1(Slave1)192.168.184.152maria-02
从库 2(Slave2)192.168.184.153maria-03

2. 虚拟机克隆与网络配置

(1)克隆从库虚拟机

  1. 关闭主库虚拟机,右键选择「管理」→「克隆」,创建完整克隆(确保数据独立);
  2. 分别启动两台从库虚拟机,修改网络配置文件:
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)传输备份文件到从库

  1. 两台从库均创建恢复目录:
mkdir /data/backup/recover
  1. 将主库备份文件传输到从库(以从库 1 为例):
scp /data/backup/xtrabackup.xbstream 192.168.184.152:/data/backup/recover

(2)恢复备份数据

  1. 验证磁盘空间(避免恢复失败):
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,说明主从数据同步成功。

四、部署注意事项

  1. 位点准确性:备份时的 Binlog 文件名和位置必须准确,否则会导致同步失败;
  2. 权限配置:从库恢复后需修复目录权限(chown -R mysql:mysql),否则 MySQL 无法启动;
  3. 网络连通性:确保 3 台服务器防火墙开放 MySQL 端口(默认 3306),或直接关闭防火墙;
  4. 生产环境建议
    • 备份文件建议加密传输,避免密码泄露;
    • 定期监控复制状态,避免同步中断;
    • 从库可开启只读模式(read_only=1),防止误写。

总结

基于位点的一主两从架构部署核心在于 “精准定位同步起点”,通过 Xtrabackup 全量备份 + Binlog 位点同步,实现数据一致性复制。该架构适用于中小规模业务,可提升读性能(从库分担查询压力)和数据可用性(主库故障时从库可切换)。后续可结合 Keepalived 实现主从自动切换,进一步提升架构高可用性。

Tags:

发表回复

Your email address will not be published. Required fields are marked *.

*
*