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用户