xtrabackup备份与恢复
介绍
Xtrabackup是由Percona团队开发的用于MySQL数据库的物理热备份工具。它支持InnoDB和XtraDB存储引擎,具备备份速度快、不影响业务运行、支持压缩和自动校验等特点。Xtrabackup目前被各大云厂商广泛采用,是MySQL备份的首选方案之一。
安装
安装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,清理数据存储目录
# 解压备份数据
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
增量备份与恢复
增量备份
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,清理数据存储目录
# 解压备份数据
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