author:殷帅鹏

createTime:2022-07-04

updateTime:

培训结束时间:2022-07-05

# Xtrabackup 备份与恢复

1.版本要求 Mysql v-8.0.22

2.xtrabackup version 8.0.22-15

Xtrabackup安装

# 安装地址,可以在下面的地址找到符合自己MySQL版本的包进行下载,这里我找到对应mysql8.0.22的版本进行下载
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/

# 安装下载
$ wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.22-15/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.22-15.1.el7.x86_64.rpm
$ yum install -y percona-xtrabackup-80-8.0.22-15.1.el7.x86_64.rpm

# 查看是否安装成功
$ xtrabackup -version

xtrabackup: recognized server arguments: --log_bin=mysql-bin --server-id=195 --datadir=/data/mysql --innodb_buffer_pool_size=10G --innodb_flush_log_at_trx_commit=0 --innodb_log_file_size=4G --innodb_log_buffer_size=512M 
xtrabackup version 8.0.22-15 based on MySQL server 8.0.22 Linux (x86_64) (revision id: fea8a0e)

Xtrabackup卸载

# 查询
$ yum list installed | grep percona

[root@iotmysql xtrabackup]# yum list installed | grep percona
percona-xtrabackup-80.x86_64     8.0.22-15.1.el7             @/percona-xtrabackup-80-8.0.22-15.1.el7.x86_64

# 删除
$ yum remove percona-xtrabackup-80.x86_64

# 1.全量备份

# 备份

# MySQL 8  xtrabackup 全备
$ xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --port=3306 --backup --target-dir=/data/tools/xtrabackup/full/20220629

# 使用scp将备份文件发送到备份服务器
$ scp -r /data/tools/xtrabackup/full/20220629 root@192.168.20.155:/data/backup/full/20220629/

查看备份文件

$ du -sh *
4.8G    20220629

# 恢复

建议在备份服务器新建mysql进行备份(备份服务器也要安装xtrabackup)

安装mysql

在做还原的时候,需要将mysql的datadir文件清空.

安装完毕以后

关闭mysql数据库

# 停止mysql
$ systemctl stop mysqld
# 删除datadir下的所有文件
# 如果不想删除 可以尝试修改 /etc/my.cnf datadir 目录 
$ cd /data/tools/mysql/data/
$ rm -rf *

准备数据

# 准备全备份的日志:
$ xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full/20220629/
# 全备份准备
$ xtrabackup --prepare --target-dir=/data/backup/full/20220629/
# 拷回数据 将备份数据拷回到datadir
$ xtrabackup -user=root --password=123456 --port=3306 --datadir=/data/tools/mysql/data/ --copy-back --target-dir=/data/backup/full/20220629/
# 执行完以后 需要把文件所有者修改为mysql用户
$ chown -R mysql:mysql /data/tools/mysql/data/*
# 启动mysql
$ systemctl start mysqld

# 2.单库备份

# 备份

# MySQL 8  xtrabackup 单库备份
$ xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --port=3306 --compress --compress-threads=2 --databases=app036 --tables-exclude=tbl_system_log --backup --target-dir=/data/tools/xtrabackup/full/20220629

# 使用scp将备份文件发送到备份服务器
$ scp -r /data/tools/xtrabackup/full/20220629 root@192.168.20.155:/data/backup/full/20220629/

参数说明

--databases=app036 备份指定库

--tables-exclude=tbl_system_log 不包含某张表

--compress --compress-threads=2 压缩备份

查看备份文件

$ du -sh *
4.8G    20220629

如果使用压缩备份,需要安装qpress进行解压

$ wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/183466/cn_zh/1608011575185/qpress-11-linux-x64.tar"
$ tar -xvf qpress-11-linux-x64.tar
$ chmod 775 qpress
$ cp qpress /usr/bin

# 恢复

建议在备份服务器新建mysql进行备份(备份服务器也要安装xtrabackup)

单库在做还原的时候,需要有数据库基础表,不用清空datadir

关闭mysql数据库

# 停止mysql
$ systemctl stop mysqld
# 解压备份文件
$ xtrabackup --defaults-file=/etc/my.cnf --decompress --target-dir=/data/backup/full/20220629/
# 准备全备份的日志:
$ xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full/20220629/
# 全备份准备
$ xtrabackup --prepare --target-dir=/data/backup/full/20220629/
# 使用rsync -avrP将备份文件同步到datadir文件夹下
$ rsync -avrP /data/backup/full/20220629/ /data/tools/mysql/data2/
# 执行完以后 需要把datadir目录下文件所有者修改为mysql用户
$ chown -R mysql:mysql /data/tools/mysql/data/*
# 启动mysql
$ systemctl start mysqld

这种单库恢复只恢复单库的数据,mysql中其他的库也会被恢复,但是并没有恢复数据

启动失败

[root@test20155 data2]# systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
# 看看 data目录是否为mysql用户