mysql数据备份之percona-xtrabackup 工具

目录

一.为什么要进行数据备份?

二.实战案例:

1.利用percona-xtrabackup 工具进行热备

完整备份:

完全恢复流程:

差量备份流程:

差量恢复流程:


一.为什么要进行数据备份?

在生产环境中,数据可能可能会丢失。

常见数据丢失原因:硬件故障,软件故障,自然灾害,黑客攻击,误操作 (占比最大)

备份的目标:

  • 数据备份前后要保持一致
  • 不影响服务的正常使用

备份的技术:

  • 热备(逻辑备份):备份一些sql备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库

优点:不用关闭服务器

缺点:效率低

  • 冷备(物理备份):直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。

优点:速度快

缺点:要把服务停止才可以备份

备份的种类:

全量备份:把要备份的数据从头到尾备份一遍

增量备份:备份上次备份后,有变化的数据

差量备份:备份上次全量备份后,有变化的数据,每次备份都是在上次全量备份的基础上备份

二.实战案例:

1.利用percona-xtrabackup 工具进行热备

工具简介:

logo:mysql数据备份之percona-xtrabackup 工具_第1张图片

简介
    它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份
percona是一家老牌的mysql技术咨询公司

获得软件包

https://www.percona.com/

进入官网:

mysql数据备份之percona-xtrabackup 工具_第2张图片

mysql数据备份之percona-xtrabackup 工具_第3张图片

 mysql数据备份之percona-xtrabackup 工具_第4张图片

 选择linux操作系统,所对应的版本进行安装mysql数据备份之percona-xtrabackup 工具_第5张图片

mysql数据备份之percona-xtrabackup 工具_第6张图片

 用wget命令把percona官方包下载到我们的linux系统上

  wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm

mysql数据备份之percona-xtrabackup 工具_第7张图片

 安装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

然后查看

mysql数据备份之percona-xtrabackup 工具_第8张图片

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

mysql数据备份之percona-xtrabackup 工具_第9张图片

到此安装结束

完整备份:

innobackupex   - -user=root  --password='密码'    /xtrabackup/full

说明:innobackex(备份的意思)--user=root(以什么身份进行备份)密码 备份到什么位置(名字随便起,自己好识别就好)

 看到下面提示,说明已经备份成功mysql数据备份之percona-xtrabackup 工具_第10张图片

看到下面已经有内容了

 

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

 开启二进制日志

vim /etc/my.cnf

mysql数据备份之percona-xtrabackup 工具_第11张图片

 systemctl restart mysqld      #:重启服务,使配置生效。

查看数据库文件的内容(发现已经有了二进制日志了)

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

mysql数据备份之percona-xtrabackup 工具_第12张图片

重新备份 (每次备份只能到此时此刻,也就是说备份文夹日期之后的数据无法备份)

 查看备份内容:

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

完全恢复流程

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

mysql数据备份之percona-xtrabackup 工具_第13张图片

mysql数据备份之percona-xtrabackup 工具_第14张图片

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

  • 从备份点恢复文件

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

  •  更改属主权限(因为现在数据库文件的属主是root,我们要改为mysql用户)

chown -R mysql.mysql /var/lib/msysysql

mysql数据备份之percona-xtrabackup 工具_第15张图片

  •  重启mysqld

systemctl restart mysqld

  • 登录验证(可以看到数据备份成功)

mysql数据备份之percona-xtrabackup 工具_第16张图片

mysql数据备份之percona-xtrabackup 工具_第17张图片

差量备份流程:

目的:实现周一全量备份,周二,周三增量备份

  • 实验环境准备:

使用指定数据库,便于后续观察效果

mysql数据备份之percona-xtrabackup 工具_第18张图片

 mysql数据备份之percona-xtrabackup 工具_第19张图片

  •  进行全量备份(增量备份前先要进行全量备份)

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

 mysql数据备份之percona-xtrabackup 工具_第20张图片

 开始全量备份(周一)

innobackupex --user=root  --password='GEDAN123.com'   /etrabackup/

看到这说明全量备份成功

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

  • 增量备份(周二)

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

给数据库插入新数据

mysql数据备份之percona-xtrabackup 工具_第21张图片

 

 开始增量备份

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

声明要在此目录文件的基础上做增量备份

下面说明增量备份成功

mysql数据备份之percona-xtrabackup 工具_第22张图片

  •  增量备份(周三)

修改时间 date 09030000

插入新数据

mysql数据备份之percona-xtrabackup 工具_第23张图片

 开始备份

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用户没有访问权限,重启会失败

mysql数据备份之percona-xtrabackup 工具_第24张图片

 systemctl restart mysqld

查看是否恢复成功:

发现数据库的文件已经有了


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

 出现下面,验证结果正确

mysql数据备份之percona-xtrabackup 工具_第25张图片

 那么如果想把第三天的也恢复怎么办呢?

  •  停止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

  • 验证

mysql数据备份之percona-xtrabackup 工具_第26张图片

那么如何 直接恢复周一,周二,周三?甚至周四...?

只需要,应用周一的备份,然后把其余的依次,加进周一的完整备份,最后恢复周一的备份

 

 

 

你可能感兴趣的:(服务,linux,centos)