【MySQL】基于位点的主从复制完整部署指南

在数据库运维中,主从复制是保障数据高可用、实现读写分离的核心方案。基于位点的复制作为 MySQL 最经典的主从部署方式,具备配置灵活、兼容性强的特点。本文将从前置准备到验证测试,一步步拆解完整部署流程,帮助运维人员快速落地。

一、基于位点的主从复制部署流程

二、前置准备(必做!)

无论采用哪种部署方式,主从复制的前置准备工作都至关重要,直接影响后续部署的成功率。核心准备工作包括Binlog 开启检查server_id 配置GTID 关闭三部分。

1. 确定主库 Binlog 已开启

Binlog 是 MySQL 主从复制的核心,主库通过 Binlog 记录所有数据变更操作,从库通过读取 Binlog 实现数据同步。因此,首先需要确认主库 Binlog 已开启。

(1)查看 Binlog 当前状态

登录主库 MySQL,执行以下命令查看 Binlog 是否开启:

show global variables like "log_bin";

若查询结果中ValueON,表示 Binlog 已开启;若为OFF,则需手动开启。

(2)配置文件确认(防止重启失效)

即使当前 Binlog 已开启,也需检查配置文件,确保 MySQL 重启后 Binlog 仍能正常启用。编辑主库 MySQL 配置文件:

vim /data/mysql/conf/my.cnf

搜索log-bin关键字,若配置了 Binlog 路径(如log-bin=/data/mysql/binlog/mysql-bin),则说明配置有效;若未配置,需添加该配置并重启 MySQL。

2. 配置主从库唯一 server_id

server_id是 MySQL 实例在主从架构中的唯一标识,同一主从架构中所有实例的 server_id 必须不同,否则会导致复制异常。建议将server_id设置为 IP 地址的后两段(如 IP 为 192.168.184.151,可设为 184151),降低重复概率。

(1)查询当前 server_id

登录 MySQL 实例,执行以下命令查询当前server_id

select @@global.server_id;

server_id的取值范围为 1 到 2³²-1。

(2)动态修改与配置文件持久化

  • 主库配置:先动态修改server_id(无需重启 MySQL),再修改配置文件确保重启后生效:
# 动态修改主库server_id

set global server_id=184151;

# 编辑配置文件

vim /data/mysql/conf/my.cnf

# 添加或修改server-id配置

server-id=184151
  • 从库配置:同理,从库需设置不同的server_id(如 184152):
# 动态修改从库server_id

set global server_id=1841522;

# 编辑从库配置文件

vim /data/mysql/conf/my.cnf

# 添加或修改server-id配置

server-id=184152

3. 关闭 GTID(基于传统位点复制)

本文基于传统位点复制,需关闭 GTID(全局事务标识)模式。若开启 GTID,可能导致复制位点识别异常。

(1)修改主从库配置文件

分别编辑主库和从库的 MySQL 配置文件,添加或修改 GTID 相关配置:

vim /data/mysql/conf/my.cnf

# 关闭GTID模式

gtid_mode=off

# 注释或关闭GTID一致性检查

# enforce_gtid_consistency=on

(2)重启 MySQL 生效

修改配置后,需重启主库和从库的 MySQL 服务:

/etc/init.d/mysql.server restart

三、部署步骤(主从协同操作)

基于位点的主从复制是最经典的部署方式,核心思路是:主库导出数据并记录备份时的 Binlog 位点,从库导入主库数据后,从指定位点开始同步主库 Binlog。

1. 步骤 1:主库创建复制专用用户

从库需要通过专用用户连接主库并读取 Binlog,因此需在主库创建具备REPLICATION SLAVE权限的用户:

# 创建复制用户repl(允许所有IP访问,生产环境建议限制从库IP)

CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Uid_dQc63';

# 授予复制权限

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

2. 步骤 2:主库导出全量数据并记录位点

使用mysqldump工具导出主库全量数据,同时记录备份时的 Binlog 位点(后续从库需从该位点开始同步)。

(1)执行全量备份

# 进入备份目录(需提前创建)

cd /data/backup/

# 导出全量数据,--master_data=2表示以注释形式记录Binlog位点

mysqldump -uroot -p --single-transaction --all-databases --master_data=2 --set-gtid-purged=OFF > alldb_bak.sql

命令关键参数说明:

  • --single-transaction:开启事务备份,确保数据一致性且不阻塞主库写操作;
  • --all-databases:导出所有数据库(若需指定数据库,可替换为--databases 数据库名);
  • --set-gtid-purged=OFF:关闭 GTID 相关信息,适配传统位点复制。

(2)提取 Binlog 位点信息

备份文件alldb_bak.sql的前 30 行包含 Binlog 位点信息,执行以下命令查看:

head -n 30 alldb_bak.sql

输出结果中类似如下内容即为位点信息:

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000027', MASTER_LOG_POS=717;

其中,MASTER_LOG_FILE为 Binlog 文件名,MASTER_LOG_POS为具体位点。

3. 步骤 3:从库导入主库全量数据

将主库的备份文件传输到从库,并导入从库,确保主从数据初始一致性。

(1)传输备份文件

通过scp命令将主库备份文件传输到从库的/data/backup目录:

# 主库执行,将备份文件传到从库(从库IP为192.168.184.152)

scp alldb_bak.sql 192.168.184.152:/data/backup

(2)从库导入数据

登录从库,进入备份目录并导入数据:

cd /data/backup

# 导入主库全量数据

mysql -uroot -p < alldb_bak.sql

4. 步骤 4:从库配置主从复制关系

导入数据后,需在从库配置主库信息(IP、复制用户、Binlog 位点等),并启动复制进程。

(1)配置主从关系

登录从库 MySQL,执行以下命令配置主从复制(需替换为实际主库信息和位点):

CHANGE MASTER TO

MASTER_HOST='192.168.184.151',  # 主库IP

MASTER_USER='repl',            # 复制用户

MASTER_PASSWORD='Uid_dQc63',   # 复制用户密码

MASTER_LOG_FILE='mysql-bin.000027',  # 主库Binlog文件名(从备份中提取)

MASTER_LOG_POS=717;            # 主库Binlog位点(从备份中提取)

(2)启动从库复制进程

start slave;

5. 步骤 5:验证主从复制状态

主从复制配置完成后,需通过SHOW SLAVE STATUS\G命令验证复制状态,核心关注以下 3 个字段:

SHOW SLAVE STATUS\G

关键状态字段说明:

  • Slave_IO_Running:从库 IO 线程状态,需为Yes(IO 线程负责从主库读取 Binlog 并写入中继日志);
  • Slave_SQL_Running:从库 SQL 线程状态,需为Yes(SQL 线程负责执行中继日志中的 SQL 语句);
  • Seconds_Behind_Master:从库落后主库的时间,需为0(表示主从数据实时同步)。

若上述字段均符合预期,说明基于位点的主从复制已成功部署。

6. 步骤 6:测试主从数据同步

为确保复制正常工作,可在主库执行数据写入操作,验证从库是否同步。

(1)主库创建测试表并插入数据

# 主库执行

use maria;  # 切换到目标数据库(需提前存在)

create table repl_test(id int);  # 创建测试表

insert into repl_test select 1;  # 插入测试数据

(2)从库验证数据同步

# 从库执行

use martin;

select * from repl_test;  # 若查询到id=1,说明数据同步正常

四、注意事项

配置文件修改后必须重启 MySQL,动态修改仅临时生效

生产环境中,复制用户应限制为从库 IP(替换%为具体 IP)

Binlog 文件需定期清理,避免磁盘空间溢出

Slave_SQL_RunningNo,需检查从库数据与主库一致性

同步延迟需监控,可通过Seconds_Behind_Master指标告警

Tags:

发表回复

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

*
*