MySQL(26) 数据备份恢复之Percona XtraBackup
一、前言
Percona XtraBackup
是支持MySQL热备份
&非阻塞备份
的开源工具。
文档:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html
tips: 本文使用
Percona XtraBackup 2.4
版本,它可以备份MySQL 5.1、5.5、5.6 和5.7
服务器上的InnoDB、XtraDB 和MyISAM表中的 数据,以及带有 XtraDB的Percona Server for MySQL 。MySQL8.0可使用Percona XtraBackup 8.0版本
本文环境
CentOS Linux release 7.6.1810 (Core)
MySQL 5.7.26
二、安装XtraBackup
可参考 https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html
# 从Percona存储库安装Percona XtraBackup
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# RHEL / Centos 5 不支持直接从远程位置安装软件包,因此您需要先下载软件包并使用rpm手动安装
wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm
rpm -ivh percona-release-latest.noarch.rpm
# 测试存储库
yum list | grep percona
# 安装xtrabackup
yum install percona-xtrabackup-24
# 查看帮助
innobackupex --help
三、数据备份与恢复
1、完整备份与恢复
备份
innobackupex --defaults-file=数据库配置文件 --host=数据库主机 --port=数据库端口 --user=数据库用户 -password='数据库密码' --database='数据库1 数据库2' --parallel=线程数 --no-timestamp 备份目录
# --no-timestamp 表示不要创建一个时间戳目录来存储备份,指定具体备份文件夹
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --no-timestamp /home/mysql_backup/full_20220325/
恢复
# 停止mysql
service mysql stop
# 移除并备份数据文件
mv /usr/local/mysql/data/ /usr/local/mysql/data_bak/
# 创建新的数据目录
mkdir -p /usr/local/mysql/data/
# 恢复数据 --copy-back: 将备份数据复制到mysql的数据目录下
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --copy-back /home/mysql_backup/full_20220325/
# 授权数据库文件
chown -R mysql:mysql /usr/local/mysql/data/
# 启动MySQL
service mysql start
# 自行查看数据是否恢复
mysql -uroot -proot -e "show databases;"
2、增量备份与恢复
备份之前先改改数据,方便一会儿恢复时检验
备份
# 基于之前的完整备份的目录 /home/mysql_backup/full_20220325/ 操作
# 增量备份1
# --incremental 指定增量备份1的目录
# --incremental-basedir=指定完整备份的目录
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --no-timestamp --incremental /home/mysql_backup/incre_20220325_1 --incremental-basedir=/home/mysql_backup/full_20220325/
# 查看`backup_type`为`incremental`
cat /home/mysql_backup/incre_20220325_1/xtrabackup_checkpoints | grep 'backup_type'
# 增量备份2
# --incremental 指定增量备份2的目录
# --incremental-basedir=指定完整备份的目录
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --no-timestamp --incremental /home/mysql_backup/incre_20220325_2 --incremental-basedir=/home/mysql_backup/full_20220325/
# 查看`backup_type`为`incremental`
cat /home/mysql_backup/incre_20220325_2/xtrabackup_checkpoints | grep 'backup_type'
恢复
# 增量备份与完整备份不同点:须在每个备份上重放已提交的事务
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --apply-log --redo-only /home/mysql_backup/full_20220325/
# 事务提交后,查看`backup_type`为`log-applied`
cat /home/mysql_backup/full_20220325/xtrabackup_checkpoints | grep 'backup_type'
# 完整备份数据+增量备份2数据(最后一次增量备份) 合并,数据最终合并到完整备份目录内
# --incremental-dir= 指定增量备份2的目录
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --apply-log --redo-only /home/mysql_backup/full_20220325/ --incremental-dir=/home/mysql_backup/incre_20220325_2/
# 准备完整备份(完整+增量合并后的数据)以回滚待处理的事务
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --apply-log /home/mysql_backup/full_20220325/
# 查看`backup_type`为`full-prepared`
cat /home/mysql_backup/full_20220325/xtrabackup_checkpoints | grep 'backup_type'
# 停止mysql
service mysql stop
# 移除并备份数据文件
mv /usr/local/mysql/data/ /usr/local/mysql/data_bak/
# 创建新的数据目录
mkdir -p /usr/local/mysql/data/
# 恢复数据 --copy-back: 将备份数据复制到mysql的数据目录下
innobackupex --defaults-file=/etc/my.cnf --host=www.zhengqingya.com --port=3306 --user=root --password='root' --parallel=3 --copy-back /home/mysql_backup/full_20220325/
# 授权数据库文件
chown -R mysql:mysql /usr/local/mysql/data/
# 启动MySQL
service mysql start
# 自行查看数据是否恢复
mysql -uroot -proot -e "show databases;"
今日分享语句:人生的奋斗目标不要太大,认准了一件事情,投入兴趣与热情坚持去做,你就会成功。