mysql数据备份之percona-xtrabackup 工具
目录
一.为什么要进行数据备份?
二.实战案例:
1.利用percona-xtrabackup 工具进行热备
完整备份:
完全恢复流程:
差量备份流程:
差量恢复流程:
一.为什么要进行数据备份?
在生产环境中,数据可能可能会丢失。
常见数据丢失原因:硬件故障,软件故障,自然灾害,黑客攻击,误操作 (占比最大)
备份的目标:
- 数据备份前后要保持一致
- 不影响服务的正常使用
备份的技术:
- 热备(逻辑备份):备份一些sql备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库。
优点:不用关闭服务器
缺点:效率低
- 冷备(物理备份):直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
优点:速度快
缺点:要把服务停止才可以备份
备份的种类:
全量备份:把要备份的数据从头到尾备份一遍
增量备份:备份上次备份后,有变化的数据
差量备份:备份上次全量备份后,有变化的数据,每次备份都是在上次全量备份的基础上备份
二.实战案例:
1.利用percona-xtrabackup 工具进行热备
工具简介:
logo:
简介
它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,percona是一家老牌的mysql技术咨询公司。
获得软件包:
https://www.percona.com/
进入官网:



选择linux操作系统,所对应的版本进行安装

用wget命令把percona官方包下载到我们的linux系统上
wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm

安装percona需要的mysql包,直接安装会报错
下载mysql官方源
yum install -y https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

安装yum工具集(因为我们使用5.7版本,源比较新,所以使用工具集,设置哪些版本开启,可以装,哪些关闭,不装)
yum install -y yum-utils
然后查看

禁用80(不用8.0版本)
yum-config-manager --disable mysql80-community
开启57(开启mysql5.7版本)
yum-config-manager --enable mysql57-community
安装percona需要的mysql包
yum install mysql-community-libs-compat -y
安装percona官方源
yum install -y percona-release-latest.noarch.rpm
yum开始安装percona
yum -y install percona-xtrabackup-24.x86_64
查询安装结果:
rpm -ql percona-xtrabackup-24

到此安装结束
完整备份:
innobackupex - -user=root --password='密码' /xtrabackup/full
说明:innobackex(备份的意思)--user=root(以什么身份进行备份)密码 备份到什么位置(名字随便起,自己好识别就好)
![]()
看到下面提示,说明已经备份成功
看到下面已经有内容了

查看这个备份的文件夹(里面就是备份的数据库,是/var/lib/mysql下的内容)

开启二进制日志
vim /etc/my.cnf

systemctl restart mysqld #:重启服务,使配置生效。
查看数据库文件的内容(发现已经有了二进制日志了)

删除上一次备份的内容,里面没有二进制,重新备份

重新备份 (每次备份只能到此时此刻,也就是说备份文夹日期之后的数据无法备份)
![]()
查看备份内容:

查看二进制日志(记录备份点后,改变的数据,因为数据库的操作都会写入二进制日志,下次查看二进制日志,就知道备份后,有增加了什么数据)154即是备份点

完全恢复流程
- 关闭mysql数据库,删除/var/lib/mysql/的内容和mysql主日志这样数据库的所有数据就会消失,模拟企业数据库出现故障。


- 生成回滚日志(就是找到备份点,指定从哪个备份点恢复,企业里面会有很多备份,要指定时间,恢复到哪一天的)
![]()
- 从备份点恢复文件

- 检查恢复情况(发现已经备份成功)

- 更改属主权限(因为现在数据库文件的属主是root,我们要改为mysql用户)
chown -R mysql.mysql /var/lib/msysysql

- 重启mysqld
systemctl restart mysqld
- 登录验证(可以看到数据备份成功)


差量备份流程:
目的:实现周一全量备份,周二,周三增量备份
- 实验环境准备:
使用指定数据库,便于后续观察效果


- 进行全量备份(增量备份前先要进行全量备份)
先把上一个实验的全量备份删除,然后修改日期,之后做增量效果就比较明显,容易区分(因为备份文件的名字是按日期来命名的)


开始全量备份(周一)
innobackupex --user=root --password='GEDAN123.com' /etrabackup/
看到这说明全量备份成功

然后查看,可以看到同名时间文件已经备份好

- 增量备份(周二)
date 09020000 修改时间 (修改时间,等会就回生成和时间相同的备份文件,便于区分)

给数据库插入新数据

开始增量备份
innobackupex --user=root --password='GEDAN123.com' --incremental /etrabackup/ --incremental-basedir=/etrabackup/2021-09-01_00-09-29
说明:--incremental 声明要做增量备份 --incremental-basedir=/etrabac/2021-09-01_00-09-29
声明要在此目录文件的基础上做增量备份
下面说明增量备份成功


- 增量备份(周三)
修改时间 date 09030000

插入新数据

开始备份
innobackupex --user=root --password='GEDAN123.com' --incremental /etrabackup/ --incremental-basedir=/etrabackup/2021-09-02_00-06-46
可以看到已经备份好了

周二,周三已经备份了,周四,周五就依次类推
差量恢复流程:
- 停止数据库
systemctl stop mysqld
- 清理数据库文件,模拟现实数据丢失
rm -rf /var/lib/mysql/*

- 开始恢复数据:
innobackupex --apply-log --redo-only /etrabackup/2021-09-01_00-09-29
说明:发现多了一个 --redo-only的选项,要进行合并
innobackupex --apply-log --redo-only /etrabackup/2021-09-01_00-09-29 --incremental-dir=/etrabackup/2021-09-02_00-06-46
说明:要进行周二的数据恢复,拼接到周一的全量数据里面(意思就是给周一的数据恢复时,加上一部分周二的数据,统一恢复)
进行周一数据恢复:(声明后数据会备份到完整备份,所以只需要恢复完整备份)
innobackupex --copy-back /etrabackup/2021-09-01_00-09-29
进行授权:chown -R mysql.mysql /var/lib/mysql/ #:不授权mysql用户没有访问权限,重启会失败

systemctl restart mysqld
查看是否恢复成功:
发现数据库的文件已经有了

重启mysql,进行验证,我们恢复的是周一,周二原则上数据里面只有周一和周二。
出现下面,验证结果正确

那么如果想把第三天的也恢复怎么办呢?
- 停止mysql
systemctl stop mysqld
- 开始恢复(因为上面周一周二,已经恢复,我们直接把周三拼接上去)
innobackupex --apply-log --redo-only /etrabackup/2021-09-01_00-09-29 --incremental-dir=/etrabackup/2021-09-03_00-02-33
- rm -rf /var/lib/mysql/* 清理数据库数据
- 然后恢复周一(里面已经有了,周二和周三的备份)
innobackupex --copy-back /etrabackup/2021-09-01_00-09-29
- 改变权限,重启
chown -R mysql.mysql /var/lib/mysql/
systemctl restart mysqld
- 验证

那么如何 直接恢复周一,周二,周三?甚至周四...?
只需要,应用周一的备份,然后把其余的依次,加进周一的完整备份,最后恢复周一的备份
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
