【MySQL数据库_如何用物理备份方法进行增量备份还原】

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工作中遇到的问题,如果文章中有错误欢迎大家在评论区指正,我们互相交流学习,如果觉得文章还不错对你有所帮助,希望大家点赞加关注哦!
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值