案例:增量备份与恢复

mysql数据库增量备份与差异备份_mysql

1 问题

  1. 练习数据增量备份
  2. 练习数据增量恢复

2 方案

3 使用2台数据库服务器

mysql数据库增量备份与差异备份_热备份_02

表-2

增量备份:备份上次备份后,新产生的数据。

PERCONA Xtrabackup是一款强大的在线热备份工具,备份过程中不锁库表,适合生产环境。支持完全备份与恢复、增量备份与恢复、差异备份与恢复。

在192.168.88.50主机完成备份练习 。

4 步骤

环境准备:安装软件(在mysql50 、MySQL51 两台主机都要安装)

//把真机里的软件拷贝到虚拟机里

[openeuler@server1 ~]$ scp /linux-soft/s3/percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz root@192.168.88.50:/root/
 
 [openeuler@server1 ~]$ scp /linux-soft/s3/percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz root@192.168.88.51:/root/

环境准备:分别在MySQL50和 Mysql51主机安装percona软件

1)在MySQL50主机安装percona软件

//安装依赖
 [root@host50 ~]# yum -y  install perl-DBD-MySQL
 //解压源码
 [root@host50 ~ ]# tar -xf percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz
 //移动并改名
 [root@host50 ~ ]# mv percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal /usr/local/percona
 //把命令添加到系统环境变量
 [root@host50 ~ ]# vim /etc/bashrc
 export PATH=/usr/local/percona/bin:$PATH  添加在文件末尾
 :wq
 
 [root@host50 ~ ]# source  /etc/bashrc
 //查看帮助信息
 [root@host50 ~ ]# man xtrabackup (按q 退出)

2)在Mysql51主机安装percona软件

[root@host51 ~]# yum -y  install perl-DBD-MySQL
  [root@host51 ~ ]# tar -xf percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal.tar.gz
  [root@host51 ~ ]# mv percona-xtrabackup-8.0.26-18-Linux-x86_64.glibc2.12-minimal /usr/local/percona
  [root@host51 ~ ]# vim /etc/bashrc
 export PATH=/usr/local/percona/bin:$PATH  添加在文件末尾
 :wq
 [root@host51 ~ ]# source  /etc/bashrc
 [root@host51 ~ ]# man xtrabackup (按q 退出)

步骤一:练习数据增量备份(在mysql50主机 完成增量备份练习)

对数据做增量备份前,必须先有一次备份,也就是首次备份,通常首次备份备份所有数据;比如每周周一完全备份,每周周二到周日增量备份。

周一完全备份(备份所有数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/fullbak --datadir=/var/lib/mysql
 
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230610",18,25000,8000);

周二增量备份(备份周一备份后新产生的数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new2 --incremental-basedir=/fullbak  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);

周三增量备份(备份周二备份后新产生的数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new3 --incremental-basedir=/new2  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);

周四增量备份(备份周三备份后新产生的数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new4 --incremental-basedir=/new3  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);

周五增量备份(备份周四备份后新产生的数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new5 --incremental-basedir=/new4  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);

周六增量备份(备份周五备份后新产生的数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new6 --incremental-basedir=/new5  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230710",18,25000,8000);

周日增量备份(备份周六备份后新产生的数据)

//备份
 [root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/new7 --incremental-basedir=/new6  --datadir=/var/lib/mysql

步骤二:练习数据增量恢复

增量恢复数据步骤:

  1. 准备恢复数据
  2. 合并数据
  3. 清空数据库目录
  4. 拷贝数据
  5. 修改数据库目录所有者/组用户为mysql
  6. 重启数据库服务

具体操作如下:

把MySQL50主机的备份文件拷贝给mysql51

//拷贝完全备份文件
 [root@mysql50~]# scp  –r  /fullbak  root@192.168.88.51:/opt/
 //拷贝增量备份文件
 [root@mysql50 ~]# scp –r  /new*  root@192.168.88.51:/opt/

在MySQL51主机使用备份文件恢复数据

1)、准备恢复数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak

2)、合并数据

//将周二的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是

周一 + 周二 的数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak --incremental-dir=/opt/new2

//将周三的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是

周一 + 周二 + 周三 的数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak --incremental-dir=/opt/new3

//将周四的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是

周一 + 周二 + 周三 +周四的数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak --incremental-dir=/opt/new4

//将周五的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是

周一 + 周二 + 周三 + 周四 +周五 的数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak --incremental-dir=/opt/new5

//将周六的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是

周一 + 周二 + 周三 + 周四 + 周五 + 周六 的数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak --incremental-dir=/opt/new6

//将周日的增量数据拷贝到周一备份目录里,合并后周一的目录里存放的是

周一 + 周二 + 周三 + 周四 + 周五 + 周六 + 周日 的数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/opt/fullbak --incremental-dir=/opt/new7

清空数据库目录

[root@mysql51 ~]# rm -rf /var/lib/mysql/*

拷贝数据

[root@mysql51 ~]# xtrabackup --copy-back --target-dir=/fullbak

修改数据库目录所有者/组用户为mysql

[root@mysql51 ~]# chown -R mysql:mysql /var/lib/mysql

重启数据库服务

[root@mysql51 ~]# systemctl  restart  mysqld

连接服务查看数据

[root@mysql51 ~]# mysql -uroot -pNSD2023...a
 mysql> select count(*) from tarena.salary where date=20230710;
 +----------+
 | count(*) |
 +----------+
 |       75 |
 +----------+
 1 row in set (0.01 sec)
 mysql> select count(*) from tarena.salary where not  date=20230710;
 +----------+
 | count(*) |
 +----------+
 |     8067 |
 +----------+
 1 row in set (0.00 sec)


案例:差异备份与恢复

1 问题

  1. 练习差异备份
  2. 练习差异恢复

2 方案

差异备份:备份完全备份后,新产生的数据。

在192.168.88.50主机完成差异备份

3 步骤

实现此案例需要按照如下步骤进行。

步骤一:练习差异备份

//周一完全备份

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/allbak --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);

周二差异备份,备份周一备份后新产生的数据

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir2 --incremental-basedir=/allbak --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);

周三差异备份,备份周一备份后新产生的数据

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir3 --incremental-basedir=/allbak  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);

周四差异备份,备份周一备份后新产生的数据

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir4 --incremental-basedir=/allbak  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);

周五差异备份,备份周一备份后新产生的数据

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir5 --incremental-basedir=/allbak  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);

周六差异备份,备份周一备份后新产生的数据

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir6 --incremental-basedir=/allbak  --datadir=/var/lib/mysql
 //插入新数据 (可以插入多行)
 mysql> insert into tarena.salary(date,employee_id,basic,bonus)values("20230810",18,25000,8000);

周日差异,备份备份周一备份后新产生的数据

[root@mysql50 ~]# xtrabackup --host=127.0.0.1 --user=root --password=NSD2023...a --backup --target-dir=/dir7 --incremental-basedir=/allbak  --datadir=/var/lib/mysql

步骤二:练习差异恢复

差异恢复数据步骤:

  1. 准备恢复数据
  2. 合并数据
  3. 清空数据库目录
  4. 拷贝数据
  5. 修改数据库目录所有者/组用户为mysql
  6. 重启数据库服务

具体操作如下:

把MySQL50的备份文件拷贝给MySQL51

[root@mysql50 ~]# scp –r  /allbak   root@192.168.88.51:/root/  周一完全备份
 [root@mysql50 ~]# scp –r  /dir7     root@192.168.88.51:/root/  周日差异备份

1)、准备恢复数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/root/allbak

2)、合并数据

说明:将周日的差异备份与周一的完全备份合并,因为周日的差异备份包扩周二+周日的所有数据

[root@mysql51 ~]# xtrabackup --prepare --apply-log-only --target-dir=/root/allbak --incremental-dir=/root/dir7

3)清空数据库目录

[root@mysql51 ~]# rm -rf /var/lib/mysql/*

4)拷贝数据

[root@mysql51 ~]# xtrabackup --copy-back --target-dir=/root/allbak

5)修改数据库目录所有者/组用户为mysql

[root@mysql51 ~]# chown -R mysql:mysql /var/lib/mysql

6)重启数据库服务

[root@mysql51 ~]# systemctl  restart  mysqld

7)连接服务查看数据

[root@mysql51 ~]# mysql -uroot -pNSD2023...a
 mysql> select count(*) from tarena.salary where date=20230810;
 +----------+
 | count(*) |
 +----------+
 |       75 |
 +----------+
 1 row in set (0.01 sec)
 mysql> select count(*) from tarena.salary where not  date=20230810;
 +----------+
 | count(*) |
 +----------+
 |     8067 |
 +----------+
 1 row in set (0.00 sec)