失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > XtraBackup 物理备份工具

XtraBackup 物理备份工具

时间:2021-06-08 05:39:33

相关推荐

XtraBackup 物理备份工具

一、工具介绍

XtraBackup是percona公司的一个产品,它是用于MySQL的开源热备份工具,在备份过程中不会锁表(针对InnoDB而言);它兼容多个MySQL版本,例如5.1、5.5、5.6和5.7,如果要用于MySQL 8 系列版本的话要下载XtraBackup 8系列工具。XtraBackup是一种物理备份工具,同物理备份工具还有MySQL商业版中提供的备份工具MEB。

官方文档:/doc/percona-xtrabackup/2.4/index.html

以下内容基于MySQL 5.7.28。

二、安装

1、安装依赖(当前2.4版本并不需要,以前版本需要,后面会介绍到)[root@db01 ~]# yum install -y perl perl-devel perl-Time-HiRes perl-DBD-MySQL libev libaio libaio-devel2、安装XtraBackup[root@db01 ~]# wget /downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.20/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm[root@db01 ~]# yum install -y percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm 3、修改配置[root@db01 ~]# vim /etc/f# 添加以下配置[client]socket=/tmp/mysql.sock4、测试[root@db01 backup]# xtrabackup --versionxtrabackup: recognized server arguments: --datadir=/service/data/data --server-id=1 --log_bin=/service/data/binlog/mysql-bin xtrabackup version 2.4.20 based on MySQL server 5.7.26 Linux (x86_64) (revision id: c8b4056)[root@db01 ~]# innobackupex --versionxtrabackup: recognized server arguments: --datadir=/service/data/data --server-id=1 --log_bin=/service/data/binlog/mysql-bin innobackupex version 2.4.20 Linux (x86_64) (revision id: c8b4056)

这里我们要注意下:

Xtrabackup中主要包含两个工具:• xtrabackup:热备innodb数据的工具,不能备份其他类型的表和表结构,如MyISAM。• innobackupex:是将xtrabackup进行封装的perl脚本,会调用xtrabackup命令来备份InnoDB表,还提供了备份MyISAM表和表结构的能力。以上是以前版本的描述,而在2.4版本中有以下变化,我们也可以通过man查看命令帮助手册或者阅读官方文档获知:innobackupex功能已经全部集成到xtrabackup里面,而innobackupex现在是作为xtrabackup的一个软链接。官方建议:不推荐使用innobackupex,请切换到xtrabackup。

xtrabackup常用选项:

重要参数介绍:

1、–prepare

对创建的备份执行恢复,以便可以使用。即对备份文件执行了InnoDB CR(崩溃恢复)的过程,让数据达到一致状态。

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。"–prepare"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态

如果尝试使用未"–prepare"的数据文件启动InnoDB,它将检测到损坏并自身崩溃,以防止在损坏的数据上运行。"–prepare"步骤可以使备份文件数据在单个瞬间完全一致。

2、–apply-log-only

不回滚未提交事务。

增量备份的"–prepare"步骤与普通备份不同。在普通备份中,为了使数据库保持一致而形成的格式:已提交的事务将相对于数据文件从日志文件中重播,未提交的事务将被回滚。

准备增量备份时,必须跳过未提交事务的回滚,因为在备份时未提交的事务可能正在进行中,并且很有可能在下一次增量备份中提交。应该使用"–apply-log-only"选项来防止回滚。

如果不使用"–apply-log-only"选项来防止回滚,则将无法对其应用增量备份。事务回滚后,无法应用下一步的增量备份。合并时除最后一个以外的所有增量备份恢复时,都必须使用"–apply-log-only"选项。

三、全备

注意:前面提到的备份过程不会锁表,针对的是InnoDB而言的,而备份非InnoDB数据(如MyISAM)时,FTWRL(全局锁)会开启。

[root@db01 backup]# xtrabackup --user=root --password=000000 --backup --target-dir=/backup/full执行以上命令进行全备,同时我们可以看到备份的具体过程,我们可以观察到:在备份InnoDB数据时,没有锁表。但是在备份非InnoDB数据时,开启了全局锁:09 06:05:40 Executing FLUSH NO_WRITE_TO_BINLOG TABLES...09 06:05:40 Executing FLUSH TABLES WITH READ LOCK...09 06:05:40 Starting to backup non-InnoDB tables and files看下备份数据文件结构:[root@db01 backup]# ll /backup/full/total 12340-rw-r-----. 1 root root487 Nov 9 06:05 backup-f-rw-r-----. 1 root root384 Nov 9 06:05 ib_buffer_pool-rw-r-----. 1 root root 12582912 Nov 9 06:05 ibdata1drwxr-x---. 2 root root4096 Nov 9 06:05 mysqldrwxr-x---. 2 root root8192 Nov 9 06:05 performance_schemadrwxr-x---. 2 root root8192 Nov 9 06:05 sysdrwxr-x---. 2 root root 88 Nov 9 06:05 userdata-rw-r-----. 1 root root 21 Nov 9 06:05 xtrabackup_binlog_info-rw-r-----. 1 root root135 Nov 9 06:05 xtrabackup_checkpoints-rw-r-----. 1 root root490 Nov 9 06:05 xtrabackup_info-rw-r-----. 1 root root2560 Nov 9 06:05 xtrabackup_logfile结构基本和数据目录一致,只是多了以下几个文件:xtrabackup_binlog_info : 当前正在使用的binlog日志文件及至备份这一刻为止binlog日志事件的位置。xtrabackup_checkpoints : 主要看检查点lsn,即to_lsn(备份结束时数据库的LSN),主要用于增量备份。xtrabackup_info : 总体信息xtrabackup_logfile: 备份生成的日志文件

恢复数据。注意还原备份之前,datadir必须为空。同样要注意的是,在执行还原之前需要关闭MySQL服务器,您不能还原到正在运行的mysqld实例的数据目录(导入部分备份时除外)。

1、模拟数据损坏[root@db01 backup]# pkill mysqld[root@db01 backup]# rm -rf /service/data/data/*2、准备备份[root@db01 backup]# xtrabackup --prepare --target-dir=/backup/full/3、恢复数据[root@db01 backup]# xtrabackup --copy-back --target-dir=/backup/full/4、更改权限[root@db01 backup]# chown -R mysql.mysql /service/data/data/5、测试mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || sys|| userdata |+--------------------+

四、增量备份

1、介绍

增量备份备份的是自上次备份以来已更改的数据。

您可以在每个完整备份之间执行许多增量备份,因此您可以设置备份方案,例如每周一次完整备份和每天增量备份,或者每天完整备份和每小时增量备份。

增量备份实际上并不会将数据文件与先前备份的数据文件进行比较。因此,在部分备份之后运行增量备份可能会导致数据不一致。

增量备份之所以有效,是因为每个InnoDB数据页都包含一个日志序列号LSN,该LSN记录当前页最后一次修改的LSN。

增量备份只需读取数据页面并将其LSN与上一个备份的LSN进行比较即可。但是,仍然需要完整备份来恢复增量更改。没有完整的备份作为基础,增量备份将毫无用处。

2、模拟环境

(1)模拟原始数据mysql> create database pxb charset utf8mb4;mysql> use pxbmysql> create table t1 (id int);mysql> insert into t1 values(1),(2);(2)模拟周日23:00 全备 [root@db01 ~]# xtrabackup --user=root --password=000000 --backup --target-dir=/backup/full(3)模拟周一白天的数据变化 mysql> use pxb;mysql> insert into t1 values(3),(4);(4)模拟周一晚上23:00增量备份 [root@db01 ~]# xtrabackup --user=root --password=000000 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full/(5)模拟周二白天的数据变化 mysql> use pxb;mysql> insert into t1 values(5),(6);(6)模拟周二增量[root@db01 ~]# xtrabackup --user=root --password=000000 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1(7)模拟周三上午的数据变化 mysql> use pxb;mysql> insert into t1 values(7),(8);(8)模拟周三下午数据损坏[root@db01 ~]# pkill mysqld [root@db01 ~]# rm -rf /servcie/data/data/*

检查对比各备份的LSN。to_lsn:这是备份结束时数据库的LSN;from_lsn:是备份的开始LSN。对于增量备份,from_lsn必须与上一个备份的to_lsnn(如果是最后一个检查点)相同。以下我们可以发现增量备份的from_lsn 都是上一个备份的to_lsn。

[root@db01 backup]# cat full/xtrabackup_checkpoints backup_type = full-backupedfrom_lsn = 0to_lsn = 2735759last_lsn = 2735768compact = 0recover_binlog_info = 0flushed_lsn = 2735768[root@db01 backup]# cat inc1/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 2735759to_lsn = 2737692last_lsn = 2737701compact = 0recover_binlog_info = 0flushed_lsn = 2737701[root@db01 backup]# cat inc2/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 2737692to_lsn = 2739619last_lsn = 2739628compact = 0recover_binlog_info = 0flushed_lsn = 2739628

3、恢复数据

(1)准备全备[root@db01 backup]# xtrabackup --prepare --target-dir=/backup/full/注意即使已跳过回滚阶段,此备份实际上现在也可以按原样恢复。如果还原它并启动MySQL,InnoDB将检测到未执行回滚阶段,并且将在后台执行该操作,就像启动时进行崩溃恢复一样。它会通知您数据库未正常关闭。(2)inc1 合并至full中并prepare[root@db01 backup]# xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1此时LSN应该与您先前对第一个增量备份的检查中看到的相符。(3)inc2 合并至full中并prepare[root@db01 backup]# xtrabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2(4)恢复全备[root@db01 backup]# xtrabackup --copy-back --target-dir=/backup/full/[root@db01 backup]# chown -R mysql.mysql /data/*(5)截取并恢复binlog[root@db01 backup]# cat inc2/xtrabackup_binlog_info mysql-bin.0000081409[root@db01 backup]# mysqlbinlog --start-position=1409 /service/data/binlog/mysql-bin.000008 > /tmp/binlog.sqlmysql> set sql_log_bin=0;mysql> source /tmp/binlog.sql;mysql> set sql_log_bin=1;mysql> select * from pxb.t1;+------+| id |+------+| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 |+------+

如果觉得《XtraBackup 物理备份工具》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。