MySQL 小技巧:利用 xtrabackup 完全备份,增量备份及还原

案例:利用 xtrabackup 8.0 完全备份,增量备份及还原 MySQL8.0

在面对海量数据时,我们无法做到每天全量备份,因此 只能每周做一次全量备份。

而每天的话则进行增量备份,确保数据安全。

注意点:MySQL 8.0.26 版本对应需要安装 8.0.26 版本的 xtrabackup 软件包

Index of /pub/percona/percona/yum/release/8/RPMS/x86_64/

MySQL 小技巧:利用 xtrabackup 完全备份,增量备份及还原_第1张图片

0) 前置条件 ( 源主机与目标主机都安装好 MySQL 服务 )
[root@centos8 ~] yum install mysql-server -y
[root@centos8 ~] systemctl enable --now mysqld

----
1) 备份过程
1.1) 先做"完全备份"
[root@centos8 ~] yum install percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm -y
[root@centos8 ~] mkdir /backup/
[root@centos8 ~] xtrabackup -uroot -pP@ssw0rd123456 --backup --target-dir=/backup/base --no-server-version-check # 完全备份

# 验证备份目录
[root@centos8 ~] ll /backup

1.2) 第一天: 修改数据
insert teachers values(20,'wang',18,'M');
insert teachers values(21,'mage',18,'M');

1.3) 第一次"增量备份"
# 基于 完全备份 做增量备份
# 基于 /backup/base 做增量备份, 备份在 /backup/inc1 目录
[root@centos8 ~] xtrabackup -uroot -pP@ssw0rd123456 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base --no-server-version-check    # 增量备份

# 验证备份目录
[root@centos8 ~] ll /backup

1.4) 第二天: 修改数据
insert teachers values(25,'wangj',18,'M');
insert teachers values(26,'wangjun',18,'M');

1.5) 第二次"增量备份"
# 基于 第一次增量备份 继续做增量备份
# 基于 /backup/inc1 做增量备份, 备份在 /backup/inc2 目录
[root@centos8 ~] xtrabackup -uroot -pP@ssw0rd123456 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1 --no-server-version-check # 增量备份

# 验证备份目录
[root@centos8 ~]# ll /backup
total 12
drwxr-x---. 6 root root 4096 Feb  4 10:48 base        # 全量备份数据库
drwxr-x---. 6 root root 4096 Feb  4 10:50 inc1        # 第一次增量备份
drwxr-x---. 6 root root 4096 Feb  4 10:50 inc2        # 第二次增量备份

1.6) 复制所有备份数据到目标主机 ( 目标主机需要存在 /backup 目录 )
[root@centos8 ~] scp -r /backup/* 目标主机:/backup/
[root@centos8 ~] scp -r /backup/* 192.168.80.150:/backup/
# 备份过程会生成三个备份目录
 /backup/{base,inc1,inc2}

----
2) 还原过程
2.1) "预准备"完全备份 ( 此选项 --apply-log-only 阻止回滚未完成的事务 )
[root@centos8 ~] yum install percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm -y

# 预处理完全备份数据
[root@centos8 ~] xtrabackup --prepare --apply-log-only --target-dir=/backup/base

2.2) 合并第 1 次增量备份到完全备份
[root@centos8 ~] xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1


2.3) 合并第 2 次增量备份到完全备份
// 最后一次还原不需要加选项 --apply-log-only
[root@centos8 ~] xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2

2.4) 复制备份数据到数据库目录
# 注意: 数据库目录必须为空, MySQL 服务不能启动
[root@centos8 ~] systemctl stop mysqld      # MySQL 服务不能启动
[root@centos8 ~] rm -rf /var/lib/mysql/*    # 数据库目录必须为空
[root@centos8 ~] xtrabackup --copy-back --target-dir=/backup/base    # 复制备份数据到数据库目录

2.5) 还原属性
[root@centos8 ~] chown -R mysql:mysql /var/lib/mysql

2.6) 启动服务
[root@centos8 ~] systemctl enable --now mysqld

2.7) 验证数据
[root@centos8 ~] mysql
mysql> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|  20 | wang          |  18 | M      |
|  21 | mage          |  18 | M      |
|  25 | wangj         |  18 | M      |
|  26 | wangjun       |  18 | M      |
+-----+---------------+-----+--------+
8 rows in set (0.00 sec)

 MySQL 小技巧:利用 xtrabackup 完全备份,增量备份及还原_第2张图片

你可能感兴趣的:(Linux,小技巧,数据库)