Xtrabackup

一、Xtrabackup介绍

  MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupe

  Percona-xtrabackup是 Percona公司开发的一个用于MySQL数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。

二、Xtrabackup优点

(1)备份速度快,物理备份可靠

(2)备份过程不会打断正在执行的事务(无需锁表)

(3)能够基于压缩等功能节约磁盘空间和流量

(4)自动备份校验

(5)还原速度快

(6)可以流传将备份传输到另外一台机器上

(7)在不增加服务器负载的情况备份数据

三、Xtrabackup备份原理

Xtrabackup

四、xtrabackup的安装部署以及备份恢复实现

1、xtrabackup的安装

[root@leanote ~]# yum install -y percona-xtrabackup-80-8.0.26-18.1.el8.x86_64.rpm
上次元数据过期检查:0:09:07 前,执行于 2021年09月16日 星期四 08时16分17秒。
依赖关系解决。
=====================================================================================================================================================================================
 软件包                                        架构                           版本                                                        仓库                                  大小
=====================================================================================================================================================================================
安装:
 percona-xtrabackup-80                         x86_64                         8.0.26-18.1.el8                                             @commandline                          14 M
安装依赖关系:
 libev                                         x86_64                         4.24-6.el8                                                  appstream                             52 k
 mariadb-connector-c                           x86_64                         3.1.11-2.el8_3                                              appstream                            200 k
 perl-DBD-MySQL                                x86_64                         4.046-3.module_el8.1.0+203+e45423dc                         appstream                            156 k
启用模块流:
 perl-DBD-MySQL                                                               4.046                                                                                                 

事务概要
=====================================================================================================================================================================================
安装  4 软件包

总计:15 M
总下载:409 k
安装大小:63 M
下载软件包:
(1/3): libev-4.24-6.el8.x86_64.rpm                                                                                                                   455 kB/s |  52 kB     00:00    
(2/3): perl-DBD-MySQL-4.046-3.module_el8.1.0+203+e45423dc.x86_64.rpm                                                                                 915 kB/s | 156 kB     00:00    
(3/3): mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm                                                                                                 884 kB/s | 200 kB     00:00    
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                                                                 1.7 MB/s | 409 kB     00:00     
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                                                                                                      1/1 
  安装    : mariadb-connector-c-3.1.11-2.el8_3.x86_64                                                                                                                            1/4 
  安装    : perl-DBD-MySQL-4.046-3.module_el8.1.0+203+e45423dc.x86_64                                                                                                            2/4 
  安装    : libev-4.24-6.el8.x86_64                                                                                                                                              3/4 
  安装    : percona-xtrabackup-80-8.0.26-18.1.el8.x86_64                                                                                                                         4/4 
  运行脚本: percona-xtrabackup-80-8.0.26-18.1.el8.x86_64                                                                                                                         4/4 
  验证    : libev-4.24-6.el8.x86_64                                                                                                                                              1/4 
  验证    : mariadb-connector-c-3.1.11-2.el8_3.x86_64                                                                                                                            2/4 
  验证    : perl-DBD-MySQL-4.046-3.module_el8.1.0+203+e45423dc.x86_64                                                                                                            3/4 
  验证    : percona-xtrabackup-80-8.0.26-18.1.el8.x86_64                                                                                                                         4/4 
Installed products updated.

已安装:
  libev-4.24-6.el8.x86_64   mariadb-connector-c-3.1.11-2.el8_3.x86_64   percona-xtrabackup-80-8.0.26-18.1.el8.x86_64   perl-DBD-MySQL-4.046-3.module_el8.1.0+203+e45423dc.x86_64

2、xtrabackup全量备份与恢复

备份前

mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | lisi     | 19  |
|  1 | wanger   | 20  |
+----+----------+-----+
3 rows in set (0.00 sec)

备份

xtrabackup --backup -u用户名 -p --target-dir=保存路径
 xtrabackup --backup -uroot -p'!QAZ2wsx' --target-dir=/databakup

删除部分数据

mysql> delete from table1 where name=lisi;
ERROR 1054 (42S22): Unknown column 'lisi' in 'where clause'
mysql> delete from table1 where name='lisi';
Query OK, 1 row affected (0.00 sec)

mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | wanger   | 20  |
+----+----------+-----+
2 rows in set (0.00 sec)

准备恢复

xtrabackup --prepare --target-dir=备份保存路径

xtrabackup --prepare --target-dir=/databakup

恢复

xtrabackup --copy-back --target-dir=备份保存路径
xtrabackup --copy-back  --target-dir=/databakup
chown mysql.mysql -Rf /var/lib/mysql
systemctl restart mysqld

恢复后

mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | lisi     | 19  |
|  1 | wanger   | 20  |
+----+----------+-----+
3 rows in set (0.01 sec)

3、xtrabackup增量备份与恢复

备份前

Database changed
mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | lisi     | 19  |
|  1 | wanger   | 20  |
+----+----------+-----+
3 rows in set (0.00 sec)

进行全量备份

xtrabackup --backup -u用户名 -p --target-dir=保存路径

xtrabackup --backup -uroot -p'!QAZ2wsx' --target-dir=/backup/mysql

向表中插入数据

mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | lisi     | 19  |
|  1 | wanger   | 20  |
|  1 | abc      | 19  |
|  1 | 123      | 19  |
+----+----------+-----+
5 rows in set (0.00 sec)

进行第一次增量备份

xtrabackup --backup -u用户 -p --target-dir=增量备份保存路径 --incremental-basedir=全备份所在路径

xtrabackup --backup -uroot -p'!QAZ2wsx' --target-dir=/backup/mysql_1 --incremental-basedir=/backup/mysql

再次向数据库中插入数据

mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | lisi     | 19  |
|  1 | wanger   | 20  |
|  1 | abc      | 19  |
|  1 | 123      | 19  |
|  1 | 456      | 20  |
|  1 | bbc      | 20  |
+----+----------+-----+
7 rows in set (0.00 sec)

进行第二次或第N次增量备份

xtrabackup --backup -uroot -p --target-dir=第二次增量备份保存位置 --incremental-basedir=上一次增量备份保存位置

xtrabackup --backup -uroot -p'!QAZ2wsx' --target-dir=/backup/mysql_2 --incremental-basedir=/backup/mysql_1

删除数据库,模拟数据丢失,进行备份恢复

删除数据库目录

rm -rf /var/lib/mysql

准备恢复

准备基本备份,注意--apply-log-only防止回滚选项,如果您不使用 防止回滚阶段的选项,那么您的增量备份将毫无用处。事务回滚后,无法应用进一步的增量备份(完全备份)

xtrabackup --prepare --apply-log-only --target-dir=完全备份路径

xtrabackup --prepare --apply-log-only --target-dir=/backup/mysql

将第一个或第N个增量备份合并到完全备份(请按照备份顺序依次合并)

xtrabackup --prepare --apply-log-only --target-dir=准备好的完全备份路径 --incremental-dir=增量备份路径
xtrabackup  --prepare --apply-log-only  --target-dir=/backup/mysql --incremental-dir=/backup/mysql_1
xtrabackup  --prepare --apply-log-only  --target-dir=/backup/mysql --incremental-dir=/backup/mysql_2

恢复数据库

xtrabackup --copy-back --target-dir=合并后的全备路径

xtrabackup --copy-back --target-dir=/backup/mysql

修改数据库目录下文件的所属

chown -Rf mysql.mysql /var/lib/mysql

配置selinux

chcon -R -t mysqld_db_t -u system_u -r object_r /var/lib/mysql

重启mysql数据库

systemctl restart mysqld

登录数据库验证恢复是否成功

[root@leanote ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.21 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from table1;
+----+----------+-----+
| id | name     | age |
+----+----------+-----+
|  1 | zhangsan | 18  |
|  1 | lisi     | 19  |
|  1 | wanger   | 20  |
|  1 | abc      | 19  |
|  1 | 123      | 19  |
|  1 | 456      | 20  |
|  1 | bbc      | 20  |
+----+----------+-----+
7 rows in set (0.00 sec)

4、恢复过程出现的问题

Failed to set datadir to '/var/lib/mysql/' (OS errno: 13 - Permission denied)

解决方法

chown mysql.mysql -Rf /var/lib/mysql

SELinux is preventing /usr/libexec/mysqld from 'read, write' accesses on the file binlog.index. For complete SELinux messages run: sealert -l 04713886-12a4-4cff-bcb2-5d5ab623ff0f

解决方法

chcon -R -t mysqld_db_t -u system_u -r object_r /var/lib/mysql

上一篇:排序系列 之 直接插入排序算法 —— Java实现


下一篇:arm linux kernel启动之start_kernel