MySQL中Xtrabackup高效部署实现主从复制方案

 更新时间:2026年04月07日 09:08:35   作者:·云扬·  
本文主要介绍了使用PerconaXtrabackup进行大规模数据库(>50GB)主从复制的部署流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在 MySQL 主从复制部署中,mysqldump 适合中小规模数据库,但面对超大规模数据(>50GB)时,备份恢复效率低下。Percona Xtrabackup 作为开源热备份工具,具备备份速度快、占用资源少、不影响业务运行的优势,是大规模数据库主从复制的优选方案。本文将详细讲解基于 Xtrabackup 的主从复制完整部署流程。

一、前置准备

  • 主从服务器已安装 MySQL(版本一致)
  • 主从服务器网络互通(开放 MySQL 端口 3306、SCP 传输端口 22)
  • 主库已创建复制用户(repl)并授权:
CREATE USER 'repl'@'192.168.184.%' IDENTIFIED BY 'Uid_dQc63';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.184.%';
FLUSH PRIVILEGES;
  1. 主从服务器安装 Xtrabackup(推荐 8.0+ 版本)

二、部署步骤(主库:192.168.184.151;从库:192.168.184.152)

步骤 1:主库执行全量备份

Xtrabackup 直接复制数据文件并记录 Binlog 位点,支持流模式输出备份文件(适合大文件传输):

# 主库执行备份命令(需输入 root 密码)
xtrabackup --defaults-file=/data/mysql/conf/my.cnf -uroot -p 
--backup --stream=xbstream --target-dir=./ > /data/backup/xtrabackup_bak/xtrabackup.xbstream
  • 备份文件保存路径:/data/backup/xtrabackup_bak/xtrabackup.xbstream
  • 核心参数:--stream=xbstream 流式输出,减少磁盘占用

步骤 2:备份文件传输至从库

使用 SCP 传输备份文件,从库需提前创建接收目录:

# 从库创建目录(若不存在)
mkdir -p /data/backup/recover
# 主库执行传输命令
scp /data/backup/xtrabackup_bak/xtrabackup.xbstream 192.168.184.152:/data/backup/recover

步骤 3:从库清空原有数据(重要)

全量备份恢复前需清空从库数据目录和 Binlog 目录,避免数据冲突:

# 关闭从库 MySQL
/etc/init.d/mysql.server stop
# 清空数据目录(确认路径正确!)
rm /data/mysql/data/* -rf
# 清空 Binlog 目录
rm /data/mysql/binlog/* -rf

生产环境注意:清空前需备份从库原有数据

步骤 4:从库恢复备份(三阶段)

Xtrabackup 恢复需经过「解压 → 准备 → 复制」三个关键步骤:

  1. 解压备份文件
cd /data/backup/recover
xbstream -x .xbstream
  1. 准备备份(一致性校验)
xtrabackup --prepare --target-dir=./
  • 作用:修复备份中的不一致数据,确保恢复后的数据可用
  1. 复制数据到从库数据目录
xtrabackup --defaults-file=/data/mysql/conf/my.cnf --copy-back --target-dir=./

步骤 5:启动从库并配置主从复制

  1. 修改数据目录权限

    MySQL 数据目录必须属于 mysql 用户,否则无法启动:

chown -R mysql:mysql /data/mysql
  1. 启动从库并验证
/etc/init.d/mysql.server start
ps -ef | grep mysql  # 查看进程是否正常

  1. 提取 Binlog 位点

    备份文件中包含 xtrabackup_binlog_info,记录备份时的同步起点:

cat /data/backup/recover/xtrabackup_binlog_info
# 输出示例:mysql-bin.000029 196(Binlog 文件+位点)

  1. 配置主从关系并启动复制
-- 从库执行 SQL 命令(替换为实际位点)
CHANGE MASTER TO
MASTER_HOST='192.168.184.151',
MASTER_USER='repl',
MASTER_PASSWORD='Uid_dQc63',
MASTER_LOG_FILE='mysql-bin.000029',  # 从 xtrabackup_binlog_info 提取
MASTER_LOG_POS=196;  # 从 xtrabackup_binlog_info 提取
-- 启动复制
start slave;

步骤 6:验证主从同步状态

  1. 查看复制状态
SHOW SLAVE STATUS\G

关键指标(需均满足):

  • Slave_IO_Running: Yes(IO 线程正常)
  • Slave_SQL_Running: Yes(SQL 线程正常)
  • Seconds_Behind_Master: 0(无延迟)

  1. 数据同步测试
-- 主库插入测试数据
INSERT INTO maria.repl_test SELECT 2;
-- 从库查询验证(应返回 id=1 和 id=2)
SELECT * FROM maria.repl_test;

三、核心对比:两种主从部署方式

部署方式优点缺点适用场景
基于位点(mysqldump)操作简单、无需额外工具备份恢复慢、占空间大中小规模(GB)
Xtrabackup热备份、速度快、省资源需安装工具、步骤稍多大规模数据库(>50GB)

四、关键注意事项

  • server_id 唯一性:主从架构中所有 MySQL 实例的 server_id 必须不同(主库建议设为 1,从库设为 2+)。
  • Binlog 位点准确性:从 xtrabackup_binlog_info 提取位点,错误位点会导致同步失败。
  • 数据目录权限:恢复后必须执行 chown -R mysql:mysql,否则 MySQL 启动报错。
  • GTID 模式:本文基于传统位点复制,需关闭 GTID(gtid_mode=OFF);若使用 GTID,需调整配置并修改同步命令。
  • 定期验证:部署后需定期执行 SHOW SLAVE STATUS\G 和数据测试,避免复制中断。

总结

Xtrabackup 凭借热备份、高效能的优势,完美解决了大规模 MySQL 数据库的主从复制部署痛点。遵循「备份 → 传输 → 恢复 → 配置 → 验证」的流程,结合关键注意事项,可快速搭建稳定的主从架构。建议根据数据量选择合适的部署方式,中小规模用 mysqldump,大规模优先 Xtrabackup。

到此这篇关于MySQL中Xtrabackup高效部署实现主从复制方案的文章就介绍到这了,更多相关MySQL Xtrabackup主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql更新自增主键id遇到的问题

    Mysql更新自增主键id遇到的问题

    本文主要介绍了Mysql更新自增主键id遇到的问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2021-11-11
  • mysql和hive中几种关联(join/union)区别及说明

    mysql和hive中几种关联(join/union)区别及说明

    本文主要介绍了MySQL和Hive中各种连接和合并操作的用法,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、LEFT SEMI JOIN以及UNION和UNION ALL,同时,也提到了Hive在处理连接时的一些特殊规则和限制
    2025-11-11
  • MySQL 如何使用事务

    MySQL 如何使用事务

    这篇文章主要介绍了MySQL 如何使用事务,帮助大家更好的理解和学习MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • mysql多个TimeStamp设置的方法解读

    mysql多个TimeStamp设置的方法解读

    timestamp设置默认值是Default CURRENT_TIMESTAMP;timestamp设置随着表变化而自动更新是ON UPDATE CURRENT_TIMESTAMP;接下来为您详细介绍
    2012-11-11
  • MySQL 5.6 中 TIMESTAMP 的变化分析

    MySQL 5.6 中 TIMESTAMP 的变化分析

    这篇文章主要介绍了MySQL 5.6 中 TIMESTAMP 的变化分析,需要的朋友可以参考下
    2015-08-08
  • mysql常用命令大全 mysql常用命令总结

    mysql常用命令大全 mysql常用命令总结

    本文介绍下,mysql中常用的一些命令,包括创建与修改数据库、数据库中的表,mysql的权限管理命令grant、revoke等的用法。有需要的朋友参考下
    2014-01-01
  • Mysql一主多从部署的实现步骤

    Mysql一主多从部署的实现步骤

    本文主要介绍了Mysql一主多从部署的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 允许任意IP访问mysql数据库的方法详解

    允许任意IP访问mysql数据库的方法详解

    MYSQL默认只能本地连接,即127.0.0.1和localhost,其他主机IP无法访问数据库,那么如何允许任意IP访问mysql数据库,所以本文小编将给大家介绍允许任意IP访问mysql数据库的方法,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 使用MySQL的Explain执行计划的方法(SQL性能调优)

    使用MySQL的Explain执行计划的方法(SQL性能调优)

    这篇文章主要介绍了使用MySQL的Explain执行计划的方法(SQL性能调优),使用EXPLAIN关键字可以模拟优化器执行SQL语句,具体详解,需要的小伙伴可以参考一下
    2022-08-08
  • MySQL中datetime和timestamp的区别及使用详解

    MySQL中datetime和timestamp的区别及使用详解

    这篇文章主要介绍了MySQL中datetime和timestamp的区别及使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论