01
引言
1、主从复制的作用和优势
主从复制是 MySQL 中常用的一种数据同步机制,通过将主服务器(Master)的数据实时复制到一个或多个从服务器(Slave),可以实现负载均衡、数据备份、高可用性等目标。例如,主服务器负责写操作,而从服务器可以分担读操作的压力,从而提高系统的整体性能。2、Xtrabackup 工具的作用
Xtrabackup 是 Percona 公司开发的一款开源备份工具,支持 MySQL 的热备份(即在数据库运行时不锁定表的情况下进行备份)。它特别适合用于大数据量的备份和恢复,并且能够保证数据的一致性。3、本文目标
本文将详细介绍如何在 MySQL 8 环境中,使用 Xtrabackup 工具在线搭建主从复制架构,确保数据的高可用性和一致性。02
环境准备
操作系统:建议使用 Linux 发行版(如 CentOS 7/8 或 Ubuntu 18.04/20.04)。
MySQL 版本:MySQL 8.x,确保主从服务器的 MySQL 版本一致。
Xtrabackup 版本:Percona Xtrabackup 8.x,与 MySQL 8 兼容。
2.1 系统要求
2.2 安装 MySQL 8
在主从服务器上分别安装 MySQL 8。可以通过官方仓库或 MySQL 官网下载安装包。安装完成后,确保 MySQL 服务正常运行。2.3 安装 Xtrabackup
Xtrabackup 可以通过 Percona 的官方仓库安装。安装完成后,使用xtrabackup --version
命令验证是否安装成功。
03
主从复制原理
二进制日志(Binary Log)
MySQL 的主从复制依赖于二进制日志。主服务器将所有写操作记录到二进制日志中,从服务器通过读取这些日志来同步数据。GTID(全局事务标识符)
GTID 是 MySQL 5.6 引入的特性,用于简化主从复制的管理。每个事务都有一个唯一的 GTID,从服务器可以通过 GTID 精确地定位需要同步的数据。复制线程
IO Thread:从服务器连接到主服务器,读取二进制日志并保存到本地的中继日志(Relay Log)。
SQL Thread:从服务器读取中继日志中的事件并执行,从而实现数据同步。
04
主库配置
4.1 修改主服务器配置文件
编辑 MySQL 的配置文件(通常为 /etc/my.cnf
或 /etc/mysql/mysql.conf.d/mysqld.cnf
)
server-id=1 # 主服务器的唯一标识log_bin=mysql-bin # 启用二进制日志如果没有还要额外添加。
在主服务器上创建一个专门用于复制的用户,并授予复制权限:
CREATE USER 'mysql_rep'@'%' IDENTIFIED BY 'repl_password';GRANT REPLICATION SLAVE ON *.* TO 'mysql_rep'@'%';FLUSH PRIVILEGES;
重启 MySQL 以使配置生效:
service mysql restart
05
Xtrabackup备份主库数据
在主库上使用 Xtrabackup 执行全量备份:
/data/soft/percona-xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --no-server-version-check --host=localhost --port=3306 --compress --compress-threads=2 --user=root --password=****** --backup --target-dir=/data/backup/
06
从库配置操作
6.1 修改从服务器配置文件
配置
my.cnf
文件,启用 GTID 和设置唯一的server-id
server-id=2gtid_mode=ONenforce_gtid_consistency=ON
通过scp命令传输完成后,使用 --decompress 选项解压备份数据
/data/soft/percona-xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --decompress --target-dir=/data/backup
2025-03-10T20:49:15.107782+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --datadir=/data/mysql/data --server-id=100 --open_files_limit=65535 --innodb_file_per_table=1 --log_bin=/data/mysql/data/mysql-bin --innodb_log_files_in_group=5 --innodb_log_group_home_dir=/data/mysql/data --innodb_undo_directory=/data/mysql/data --innodb_buffer_pool_size=16455346892 --innodb_log_file_size=1G --innodb_log_buffer_size=100M2025-03-10T20:49:15.107925+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized client arguments: --socket=/data/mysql/data/mysql.sock --decompress=1 --target-dir=/data/backup/data/soft/percona-xtrabackup/bin/xtrabackup version 8.0.33-28 based on MySQL server 8.0.33 Linux (x86_64) (revision id: b3a3c3dd)2025-03-10T20:49:15.108676+08:00 0 [Note] [MY-011825] [Xtrabackup] decompressing ./xtrabackup_logfile.qpsh: 1: qpress: not foundcat: write error: Broken pipe2025-03-10T20:49:15.216597+08:00 0 [ERROR] [MY-011825] [Xtrabackup] decrypt and decompress thread 0 failed.
---手工将qpress放到服务器上chmod +x qpresscp qpress usr/bincp qpress usr/sbin

解压完成后,使用
--prepare选项准备备份数据,确保数据的一致性:
/data/soft/percona-xtrabackup/bin/xtrabackup --prepare --target-dir=/data/backup

备库恢复数据文件:
/data/soft/percona-xtrabackup/bin/xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup

修改数据目录的权限以确保 MySQL 可以访问。
chown -R mysql:mysql data/mysq/data
6.6 启动从服务器 MySQL 服务
启动 MySQL 服务并检查数据是否恢复成功。
07
配置主从同步
这个文件里面有相关对应信息:xtrabackup_info# grep binlog_pos xtrabackup_infobinlog_pos = filename 'mysql-bin.000215', position '157'
reset master;change master tomaster_host='主库IP',master_port=3306,master_user='mysql_rep',master_password='lq****4N',master_log_file='mysql-bin.000215',master_log_pos=157;
启动复制进程并检查状态。
start slave;show slave status\G

08
验证主从复制
8.1 检查复制状态
使用
SHOW SLAVE STATUS\G
检查复制是否正常运行。
8.2 测试数据同步
在主服务器上创建测试数据,验证从服务器是否同步成功。
总结:
通过本文的步骤,您可以成功使用 Xtrabackup 在 MySQL 8 中在线搭建主从复制环境。
主从复制不仅提高了系统的可用性和性能,还为数据备份和灾难恢复提供了保障。
建议进一步学习 MySQL 的高级复制特性,如半同步复制、多线程复制等。
参考资料
MySQL 8 官方文档:https://dev.mysql.com/doc/refman/8.0/en/
Percona Xtrabackup 官方文档:https://www.percona.com/software/mysql-database/percona-xtrabackup




