两种在 MySQL 不停服情况下新增从库的方法:mysqldump与XtraBackup

何川
何川
发布时间:2026-10-13| 2人浏览过
原创

本文介绍如何在生产环境中不重启MySQL服务的情况下,向现有主从架构新增第二从库。文章对比了基于mysqldump的逻辑备份与基于XtraBackup的物理备份两种方案,详细演示了从配置参数、执行备份、迁移数据到设置同步位点的全过程,确保在主库持续写入时保持数据一致性并完成新从库的接入。

结果或目标

在生产环境一主一从的基础上,新增一台从库(192.168.18.214),且操作期间不影响线上业务使用,即无需停止或重启MySQL服务。

准备条件

  • 服务器信息:
    • 主库 (Master):192.168.18.212
    • 原有从库 (Slave 1):192.168.18.213
    • 新增从库 (Slave 2):192.168.18.214(新安装MySQL,初始状态)
  • 数据库版本:MySQL 5.5
  • 存储引擎:InnoDB
  • 测试库名:weibo

通用前置检查

第1步:确认主库开启Binlog

目的:主从复制依赖binlog日志,需确保主库已正确配置。
操作:修改主库 my.cnf,加入以下参数:

server-id = 1
log-bin = mysql-bin
auto-increment-increment = 1
auto-increment-offset = 1
slave-skip-errors = all

注意:若修改配置文件,需重启主库MySQL服务使配置生效。由于是主库操作,此处可接受短暂停机,或通过SET GLOBAL动态调整部分参数(视版本而定)。

第2步:主库创建同步账号

目的:为从库提供连接主库进行数据同步的专用用户。
操作:登录主库执行授权命令,允许从网段访问:

mysql> grant all on *.* to 'sync'@'192.168.18.%' identified by 'sync';

方式一:mysqldump逻辑备份(推荐小数据量)

第1步:从库配置MySQL基础参数

目的:确保新从库具备作为Slave的基础配置。
操作:编辑新从库 my.cnf:

server-id = 3
log-bin = mysql-bin
auto-increment-increment = 1
auto-increment-offset = 1
slave-skip-errors = all

第2步:主库执行逻辑备份

目的:获取一致性的数据快照。
操作:在主库执行:

# mysqldump -uroot -p123 --routines --single_transaction --master-data=2 --databases weibo > weibo.sql

参数说明:
--single_transaction:利用InnoDB事务特性,在开始dump前设置隔离级别并创建快照,保证一致性且不锁表。
--master-data=2:将 binlog 文件名和位置写入 dump 文件注释中,便于后续定位同步起点。

第3步:传输备份文件至从库

操作:

# scp weibo.sql root@192.168.18.214:/home/root

第4步:模拟主库新数据生成

目的:验证在备份完成后产生的增量数据也能被同步。
操作:登录主库创建测试表:

mysql> create table test_tb(id int,name varchar(30));

第5步:从库导入数据

操作:

# mysql -uroot -p123 -e 'create database weibo;'
# mysql -uroot -p123 weibo < weibo.sql

第6步:获取Binlog Position并配置同步

目的:确定从库应从哪个日志节点开始回放。
操作:查看备份文件头部的 CHANGE MASTER TO 信息:

# head -25 weibo.sql

找到类似如下行:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;

在新从库执行:

mysql> change master to master_host='192.168.18.212', master_user='sync', master_password='sync', master_log_file='mysql-bin.000001', master_log_pos=107;
mysql> start slave;

第7步:验证同步状态

完成判断:在从库执行 show slave status\G;,观察 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。
数据验证:执行 show tables;,应能看到之前在主库创建的 test_tb 表。


方式二:XtraBackup物理备份(推荐大数据量/高可用场景)

注意:此方法为连续流备份,无需停主库,但需在从库侧短暂停止MySQL服务以替换数据目录。

第1步:清理旧从库状态(如已存在配置)

操作:若从库已有主从配置,先重置:

mysql> stop slave;
mysql> reset slave;
mysql> drop database weibo;

第2步:主库执行XtraBackup备份

操作:在主库执行,生成带时间戳的备份目录:

# innobackupex --user=root --password=123 ./

假设生成的备份目录名为 2015-07-01_16-49-43,其中包含 xtrabackup_binlog_info 文件记录当前Binlog位置。

第3步:传输备份数据至从库

# scp -r 2015-07-01_16-49-43 root@192.168.18.214:/home/root

第4步:从库恢复数据(需短暂停服)

风险提醒:此步骤需停止从库MySQL服务并替换datadir,请确保数据已安全传输且无其他进程占用。
操作:

# sudo rm -rf /var/lib/mysql/
# sudo mv 2015-07-01_16-49-43/ /var/lib/mysql
# sudo chown mysql.mysql -R /var/lib/mysql
# sudo /etc/init.d/mysql start

启动后检查进程:ps -ef |grep mysql。

第5步:获取Binlog Position

操作:在从库读取备份中的Binlog信息:

# cat /var/lib/mysql/xtrabackup_info

找到 binlog_pos 字段,例如:
binlog_pos = filename 'mysql-bin.000001', position 429

第6步:配置同步并验证

操作:在从库执行:

mysql> change master to master_host='192.168.18.212', master_user='sync', master_password='sync', master_log_file='mysql-bin.000001', master_log_pos=429;
mysql> start slave;

观察 Slave_IO_Running 和 Slave_SQL_Running 为 Yes。在主库再次创建新表(如 test_tb2),从库应能自动同步该表结构。

简要总结

mysqldump 适合数据量较小、对实时性要求稍低的场景,全程逻辑操作;XtraBackup 适合大数据量场景,备份速度快且对主库压力小,但在从库恢复数据时需短暂替换目录。根据实际业务规模选择合适的工具,即可实现 MySQL 集群的平滑扩容。

以上就是两种在 MySQL 不停止服务情况下新增从库的详细流程,更多关于 MySQL 主从复制与维护的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。