【MySQL】基于位点的架构切换实战:一主两从↔级联

在 MySQL 主从复制架构中,基于位点的切换是保障数据一致性的核心方案,适用于 “一主两从” 与 “级联架构”(主→从 1→从 2)的灵活转换。本文将详细拆解切换原理、分步操作流程及验证方法,帮助你快速落地实践。

核心原理

架构切换的关键在于精准记录和对齐 Binlog 位点:通过同步所有从库到同一数据节点,再重新配置复制关系,确保切换前后数据无丢失、无不一致。核心原则是 “先对齐位点,再切换主库”。

环境说明

角色IP 地址核心作用
主库192.168.184.151核心写节点,同步日志到从库
从库 1192.168.184.152级联架构中的中间转发节点
从库 2192.168.184.153二级从库,灵活切换主库
复制账号repl/Uid_dQc63所有从库的复制授权账号

一、一主两从 → 级联架构(主→从 1→从 2)

应用场景

当主库压力过大时,将从库 2 的同步源从主库改为从库 1,减少主库的复制连接数,降低 IO 压力。

步骤 1:统一数据位点(关键前置操作)

  1. 停止从库 2 复制:避免切换期间数据偏移
-- 从库2(192.168.184.153)执行
stop slave;
  1. 记录从库 1 的主库同步位点:确保从库 2 对齐该节点
-- 从库1(192.168.184.152)执行
stop slave;
-- 记录核心参数(主库的Binlog文件和位置)
show slave status\G;
-- 需记录:
-- Relay_Master_Log_File: mysql-bin.000013(从库1同步到的主库Binlog)
-- Exec_Master_Log_Pos: 729(对应主库的Binlog位置)
  1. 恢复从库 1 复制:避免影响其同步主库
-- 从库1执行
start slave;
  1. 从库 2 同步到目标位点:与从库 1 对齐主库数据
-- 从库2执行,同步到主库的指定位点后自动停止
start slave UNTIL MASTER_LOG_FILE="mysql-bin.000013", MASTER_LOG_POS=729;
  • 验证状态:show slave status\GSlave_SQL_Running: No 为正常(已同步到目标位点)

步骤 2:从库 2 切换主库为从库 1

  1. 获取从库 1 的当前 Binlog 位点:作为从库 2 的新同步起点
-- 从库1执行
show master status\G;
-- 示例输出(需记录):
-- File: mysql-bin.000014(从库1的Binlog文件)
-- Position: 738(从库1的Binlog位置)
  1. 重新配置从库 2 的复制关系
-- 从库2执行
stop slave;
-- 切换主库为从库1
CHANGE MASTER TO
MASTER_HOST='192.168.184.152',  -- 新主库IP(从库1)
MASTER_USER='repl',
MASTER_PASSWORD='Uid_dQc63',
MASTER_LOG_FILE='mysql-bin.000014',  -- 从库1的Binlog文件
MASTER_LOG_POS=738;  -- 从库1的Binlog位置

-- 启动复制
start slave;

步骤 3:验证级联架构

  1. 基础状态验证:从库 2 执行 show slave status\G,需满足:
    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes
  1. 数据同步测试:主库插入数据,从库 1 和从库 2 均需同步成功:
-- 主库执行插入操作
use maria;
insert into repl_test select 222;

-- 从库1和从库2分别查询,均需返回222
select * from repl_test;

二、级联架构 → 一主两从(主→从 1、主→从 2)

应用场景

级联架构中从库 1 故障或需恢复主库直接同步时,将从库 2 的同步源改回主库。

步骤 1:记录关键位点(确保数据一致)

  1. 从库 1 记录主库同步位点
-- 从库1执行
stop slave;
-- 记录主库的同步位点(与自身Binlog位点对齐)
show master status\G;  -- 示例:mysql-bin.000014, 1078
show slave status\G;   -- 验证一致性:
-- Relay_Master_Log_File=mysql-bin.000013(主库Binlog)
-- Exec_Master_Log_Pos=1067(主库Binlog位置)

2. 从库 2 记录从库 1 的同步位点

-- 从库2执行
show slave status\G;
-- 需确认:Relay_Master_Log_File和Exec_Master_Log_Pos与从库1的Binlog文件和Binlog位置一致

3. 恢复从库 1 复制

-- 从库1执行
start slave;

步骤 2:从库 2 切换主库为主库

从库 2 重新配置复制关系(主库改为主库):

-- 从库2执行
stop slave;
-- 重新配置主库为原主库(192.168.184.151)
CHANGE MASTER TO
MASTER_HOST='192.168.184.151',
MASTER_USER='repl',
MASTER_PASSWORD='Uid_dQc63',
MASTER_LOG_FILE='mysql-bin.000013',  -- 主库的Binlog文件(从库1记录的)
MASTER_LOG_POS=1067;  -- 主库的Binlog位置(从库1记录的)

-- 启动复制
start slave;

步骤 3:验证一主两从架构

  1. 状态验证:从库 2 执行 show slave status\G,确保 IO 和 SQL 线程均为 Yes。
  1. 数据同步测试:主库插入数据,验证从库 1 和从库 2 均能正常同步。

避坑指南

  1. 位点必须精准:Binlog 文件名和位置错误会导致数据不一致,建议多次核对。
  2. 操作顺序不可乱:必须先停止相关从库复制,再记录位点,避免位点漂移。
  3. 同步状态检查:切换后务必验证 Slave_IO_RunningSlave_SQL_Running 状态,以及数据一致性。
  4. 权限提前确认:复制账号需具备 REPLICATION SLAVE 权限,避免连接失败。

总结

基于位点的 MySQL 架构切换核心是 “位点对齐 + 关系重配”,通过严格的步骤控制可实现零数据丢失切换。无论是降低主库压力的级联架构,还是恢复高效同步的一主两从架构,都需牢记 “先对齐数据,再切换主库” 的原则,确保架构迁移稳定可靠。

Tags:

发表回复

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

*
*