1、概述
MySQL的数据库为MySQL 5.7.30版本 ,用物理备份来进行增量备份与还原
模拟场景:我们每周天进行全备,然后每天增量备份,第四天的时候把库删了,怎么恢复数据?
2、安装部署
2.1Mysql5.7.30安装(此处省略)
2.2xtrabackup-2.4.24 安装
官网地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
安装依赖包:(rpm或二进制包任选其一)
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
1)下载并安装 安装路径任意(rpm包)
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.24/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.24-1.el7.x86_64.rpm
安装后检查一下
which innobackupex
which xtrabackup
2)二进制包安装
进入官网,点击 Online Documentation,有教程
https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.24/binary/tarball/percona-xtrabackup-2.4.24-Linux-x86_64.glibc2.12.tar.gz
解压 : tar xvf percona-xtrabackup-2.4.21-Linux-x86_64.glibc2.12.tar.gz
设置环境变量或者软连接
方法1 设置环境变量
[root@localhost src]# vi /etc/profile
设置如下:
export PHP_HOME=/usr/local/php
PATH=$PATH:$PHP_HOME/bin:/usr/local/xtrabackup/bin
export PATH
说明:只需要在path中加入:/usr/local/xtrabackup/bin即可
使新设置的环境变量生效
[root@localhost src]# source /etc/profile
方法2 创建软链接
[root@localhost src]# ln -s /usr/local/xtrabackup/bin/* /usr/bin/
查看版本xtrabackup --version 至此安装好了
3、使用sysbench 压测创建多张表
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。本身支持mysql数据库的压测。
安装sysbench:默认路径/usr/share/sysbench
yum install sysbench
查看sysbench安装版本
sysbench --version
准备压测数据(参数:sysbench路径、主机名、端口号、用户、密码、数据库名、mysql驱动、10张表、每张表10万条测试数据、每隔10秒输出一下压测情况、10个线程模拟并发访问)
sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password='123' --mysql-db=db --db-driver=mysql --tables=10 --table-size=100000 --report-interval=10 --threads=128 prepare
4、备份与还原
4.1全量备份
(场景:周日进行全量备份,自定义备份路径名称:/data/backup/xbk/full_`date +%F`)
innobackupex --user=root --password=123 -S /tmp/mysql.sock --no-timestamp /data/backup/xbk/full_`date +%F`
4.2增量备份
(场景:周一、周二、周三每天都有新数据插入,每天进行增量备份,周四数据库被误删除,数据丢失如何恢复)
周一增量备份(inc1_`date +%F`)
innobackupex --user=root --password=123 -S /tmp/mysql.sock --no-timestamp --incremental --incremental-basedir=/data/backup/xbk/full_2022-09-20 /data/backup/xbk/inc1_`date +%F`
周二增量备份(inc2_`date +%F`)
innobackupex --user=root --password=123 -S /tmp/mysql.sock --no-timestamp --incremental --incremental-basedir=/data/backup/xbk/inc1_2022-03-04 /data/backup/xbk/inc2_`date +%F`
周三增量备份(inc3_`date +%F`)
innobackupex --user=root --password=123 -S /tmp/mysql.sock --no-timestamp --incremental --incremental-basedir=/data/backup/xbk/inc2_2022-03-04 /data/backup/xbk/inc3_`date +%F`
每次备份完检查备份文件下xtrabackup_checkpoints中to_lsn和下一个增量备份文件中from_lsn是否对应
cat /data/backup/xbk/full_2022-09-20/xtrabackup_checkpoints
cat /data/backup/xbk/inc1_2022-03-04/xtrabackup_checkpoints
周四下午出现数据损坏,如何恢复到误删除之前
pkill mysqld
rm -rf /usr/local/mysql/data/*
4.3恢复数据(全量备份+增量备份+binlog备份)
(恢复思路:我们有周日全量备份,周一、周二、周三增量备份,和全量binlog,处理备份需要将inc1\inc2\inc3按顺序依次合并到全备,并进行prepare)
周一增量数据inc1合并到全量数据full中,并且prepare
innobackupex --apply-log --redo-only /data/backup/xbk/full_2022-09-20/
cd /data/backup/xbk/
innobackupex --apply-log --redo-only --incremental-dir=inc1_2022-03-04 full_2022-09-20
检验合并结果:xtrabackup_checkpoints文件中to_lsn相同,合并成功
[root@localhost xbk]# cat full_2022-09-20/xtrabackup_checkpoints |grep "to_lsn"
to_lsn = 250366079
[root@localhost xbk]# cat inc1_2022-03-04/xtrabackup_checkpoints |grep "to_lsn"
to_lsn = 250366079
将合并后全备再次prepare
innobackupex --apply-log /data/backup/xbk/full_2022-09-20/
周二增量数据inc2合并到全量数据full中,并且prepare
cd /data/backup/xbk/
innobackupex --apply-log --redo-only --incremental-dir=inc2_2022-03-04 full_2022-09-20
检验合并结果:xtrabackup_checkpoints文件中to_lsn相同,合并成功
周三增量数据inc3合并到全量数据full中,并且prepare
cd /data/backup/xbk/
innobackupex --apply-log --redo-only --incremental-dir=inc3_2022-03-04 full_2022-09-20
检验合并结果:xtrabackup_checkpoints文件中to_lsn相同,合并成功
将最终合并后全备再次prepare
innobackupex --apply-log /data/backup/xbk/full_2022-09-20/
恢复数据并启动
cd/usr/local/mysql/data
innobackupex --copy-back /data/backup/xbk/full_2022-09-20/
chown -R mysql.mysql /usr/local/mysql/data/*
/etc/init.d/mysqld start
4.4binlog日志恢复
截取周三增量备份后,故障之前所有binlog日志,并进行恢复
起点 :inc1增量备份完成后的位置点
cat /data/backup/xbk/inc1_2022-09-20/xtrabackup_binlog_info
mysql-bin.000005 190844690 9e35d5f4-9aba-11ec-986e-000c291b0bae:1-44
终点: binlog 结尾
mysqlbinlog --skip-gtids --start-position=190844690 /usr/local/mysql/data/data/binlog/mysql-bin.000005 >/data/backup/bin.sql
恢复binlog
mysql> set sql_log_bin=0;
mysql> source /data/backup/bin.sql
mysql> set sql_log_bin=1;
xbk恢复完成后,清空所有日志
mysql> reset master;
立即再做个全备
———————————————————————————————————————————
不定期分享MySQL DBA工作中遇到的问题,如果文章中有错误欢迎大家在评论区指正,我们互相交流学习,如果觉得文章还不错对你有所帮助,希望大家点赞加关注哦!