案例:增量备份与恢复
1 问题
- 练习数据增量备份
- 练习数据增量恢复
2 方案
3 使用2台数据库服务器
表-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
步骤二:练习数据增量恢复
增量恢复数据步骤:
- 准备恢复数据
- 合并数据
- 清空数据库目录
- 拷贝数据
- 修改数据库目录所有者/组用户为mysql
- 重启数据库服务
具体操作如下:
把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 问题
- 练习差异备份
- 练习差异恢复
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
步骤二:练习差异恢复
差异恢复数据步骤:
- 准备恢复数据
- 合并数据
- 清空数据库目录
- 拷贝数据
- 修改数据库目录所有者/组用户为mysql
- 重启数据库服务
具体操作如下:
把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)