Xtrabackup是由Percona团队开发的用于MySQL数据库的物理热备份工具。它支持InnoDB和XtraDB存储引擎,具备备份速度快、不影响业务运行、支持压缩和自动校验等特点。Xtrabackup目前被各大云厂商广泛采用,是MySQL备份的首选方案之一。
一、Xtrabackup简介
Xtrabackup能够备份InnoDB、XtraDB和MyISAM等存储引擎的数据,并且支持在数据库运行时进行备份,不会打断正在执行的事务,无需锁表。Xtrabackup还具有压缩、加密、自动备份校验等功能,能够显著减少备份文件的大小和提高数据安全性。
主要工具
Xtrabackup包含两个主要的工具:
- xtrabackup:只能备份InnoDB和XtraDB两种存储引擎的表。
- innobackupex:一个封装了xtrabackup的Perl脚本,支持同时备份InnoDB和MyISAM表。但在备份MyISAM表时,需要加一个全局的读锁。
安装
安装xtrabackup
# 下载地址
https://www.percona.com/downloads
https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/tarball/percona-xtrabackup-2.4.29-Linux-x86_64.glibc2.17.tar.gz
# 官方文档
https://docs.percona.com/percona-xtrabackup/innovation-release/index.html
tar zxf percona-xtrabackup-2.4.29-Linux-x86_64.glibc2.17.tar.gz
mv percona-xtrabackup-2.4.29-Linux-x86_64.glibc2.17 /usr/local/xtrabackup
echo 'export PATH=$PATH:/usr/local/xtrabackup/bin' >> /etc/profile
source /etc/profile
安装qpress
qpress是解压缩需要用到的工具
wget -d --user-agent="Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0" https://docs-tencentdb-1256569818.cos.ap-guangzhou.myqcloud.com/qpress-11-linux-x64.tar
tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile
创建用户
创建具有所需最低权限的数据库用户的 SQL 示例 完整备份将是:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
完整备份与恢复
备份
bakdir="/backup/fullbackups/$(date '+%F')"
mkdir -p $bakdir
# --backup 备份
# --compress 压缩
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --backup --compress --target-dir=$bakdir
恢复
恢复数据的时候要先关闭MySQL,清理数据存储目录
systemctl stop mysqld
rm -rf /usr/local/mysql/data/*
# 解压备份数据
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --decompress --target-dir=$bakdir
# 准备备份文件以供恢复
xtrabackup --prepare --target-dir=$bakdir
# 恢复数据
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --copy-back --target-dir=$bakdir
# 修改权限,替换成自己的数据存储目录
chown -R mysql:mysql /var/lib/mysql
# 然后启动MySQL即可
systemctl start mysqld
增量备份与恢复
增量备份
rm -rf /backup/fullbackups/2024-08-06/
fulldir="/backup/fullbackups/$(date '+%F')"
incdir="/backup/incrementalbackups/$(date '+%F')"
mkdir -p $fulldir
mkdir -p $incdir
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --backup --compress --target-dir=$fulldir
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --backup --compress --target-dir=$incdir --incremental-basedir=$fulldir
在备份的目录里面会有xtrabackup_checkpoints文件
[root@localhost ~]# cat /backup/incrementalbackups/2024-07-26/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 4470833
to_lsn = 4470833
last_lsn = 4470842
compact = 0
recover_binlog_info = 0
flushed_lsn = 4470842
# from_lsn是备份的起始 LSN,对于增量备份,它必须与前一个/基础的 LSN 相同
# to_lsn是备份的结束 LSN
# last_lsn是备份完成是的LSN
增量恢复
恢复数据的时候要先关闭MySQL,清理数据存储目录
systemctl stop mysqld
rm -rf /usr/local/mysql/data/*
# 解压备份数据
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --decompress --target-dir=$fulldir
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --decompress --target-dir=$incdir
# 准备数据
xtrabackup --prepare --apply-log-only --target-dir=$fulldir
# 把增量备份的数据合并到完整备份里面
xtrabackup --prepare --apply-log-only --target-dir=$fulldir --incremental-dir=$incdir
# 恢复数据
xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --copy-back --target-dir=$fulldir
# 修改权限,替换成自己的数据存储目录
chown -R mysql:mysql /var/lib/mysql
# 然后启动MySQL即可
systemctl start mysqld