原文地址:https://www.cpweb.top/1046

一、工具介绍

  XtraBackup是percona公司的一个产品,它是用于MySQL的开源热备份工具,在备份过程中不会锁表(针对InnoDB而言);它兼容多个MySQL版本,例如5.1、5.5、5.6和5.7,如果要用于MySQL 8 系列版本的话要下载XtraBackup 8系列工具。XtraBackup是一种物理备份工具,同物理备份工具还有MySQL商业版中提供的备份工具MEB。
  官方文档:https://www.percona.com/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 https://www.percona.com/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/my.cnf      # 添加以下配置
[client]
socket=/tmp/mysql.sock4、测试
[root@db01 backup]# xtrabackup --version
xtrabackup: 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 --version
xtrabackup: 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常用选项:

选项             含义
–user 指定用户名
–password 指定密码
–host 指定主机
–port 指定端口
–backup 进行备份并将其放置在–target-dir指定目录中
–target-dir 指定备份的目标目录。如果该目录不存在,则会创建它。如果该目录存在并且为空,则命令将执行成功。xtrabackup不会覆盖现有文件,会报错文件已经存在。
–copy-back 将先前制作的备份中的所有文件从备份目录复制到其原始位置。
–incremental-basedir 创建增量备份时,该目录为前一次全备或者增备的目录,该目录是增量备份的基本数据集。
–incremental-dir 该选项表示还原时增量备份的目录。
–defaults-file 该选项指定从哪个文件读取MySQL配置,必须作为命令行上的第一个选项。
–datadir 备份的源目录。这应该与MySQL的datadir相同,因此会从my.cnf中读取(如果存在);否则,必须在命令行上指定它。

重要参数介绍:

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数据时,开启了全局锁:
201109 06:05:40 Executing FLUSH NO_WRITE_TO_BINLOG TABLES...
201109 06:05:40 Executing FLUSH TABLES WITH READ LOCK...
201109 06:05:40 Starting to backup non-InnoDB tables and files看下备份数据文件结构:
[root@db01 backup]# ll /backup/full/
total 12340
-rw-r-----. 1 root root      487 Nov  9 06:05 backup-my.cnf
-rw-r-----. 1 root root      384 Nov  9 06:05 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Nov  9 06:05 ibdata1
drwxr-x---. 2 root root     4096 Nov  9 06:05 mysql
drwxr-x---. 2 root root     8192 Nov  9 06:05 performance_schema
drwxr-x---. 2 root root     8192 Nov  9 06:05 sys
drwxr-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 root      135 Nov  9 06:05 xtrabackup_checkpoints
-rw-r-----. 1 root root      490 Nov  9 06:05 xtrabackup_info
-rw-r-----. 1 root root     2560 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 pxb
mysql> 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-backuped
from_lsn = 0
to_lsn = 2735759
last_lsn = 2735768
compact = 0
recover_binlog_info = 0
flushed_lsn = 2735768
[root@db01 backup]# cat inc1/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2735759
to_lsn = 2737692
last_lsn = 2737701
compact = 0
recover_binlog_info = 0
flushed_lsn = 2737701
[root@db01 backup]# cat inc2/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2737692
to_lsn = 2739619
last_lsn = 2739628
compact = 0
recover_binlog_info = 0
flushed_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.000008    1409
[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 物理备份工具相关推荐

  1. mysql 物理备份工具_mysql物理备份工具Xtrabackup安装配置

    mysql物理备份工具Xtrabackup安装配置 1Xtrabackup工具介绍 Xtrabackup是一个对InnoDB做物理数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具 ...

  2. mysql物理备份工具Xtrabackup安装配置

    mysql物理备份工具Xtrabackup安装配置 1    Xtrabackup工具介绍 Xtrabackup是一个对InnoDB做物理数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业 ...

  3. xtrabackup物理备份

    xtrabackup是percona公司的mysql物理备份工具 xtrabackup跟innobackup类似,只是命令有点不一样.备份的动作基本是一模一样 innobackupex: innoba ...

  4. mysql数据库物理备份_MySQL数据库之xtrabackup物理备份(一)

    (1)备份开始时会开启一个后台检测进程,实时检测mysql redo(已提交的事务)的变化,一旦发现redo中有新日志写入,立刻将日志记入后台日志文件xtrabackup_log中, (2)复制Inn ...

  5. MySQL备份与恢复——基于Xtrabackup物理备份恢复

    一.说明 Percona XtraBackup工具提供了一种在执行MySQL数据热备的方法.Percona XtraBackup是一个免费的.在线的.开源的.完整的数据库备份解决方案,适用于MySQL ...

  6. mysqlbackup企业版物理备份工具使用

    MySQL Enterprise Backup 简称MEB MEB8 对应的是MySQL8.0版本 (8.0.28),备份工具的版本和MySQL版本要一致. MEB8 新特性 参考链接 https:/ ...

  7. mysql备份工具 :mysqldump mydumper Xtrabackup 原理

    备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...

  8. 【MySQL数据备份与恢复】【安装xtrabackup 备份工具】【完全备份流程】【增量备份流程】【差异备份流程】

    [MySQL数据备份与恢复] 1.为什么要备份 备份:能够防止由于机械故障以及人为误操作带来的数据丢失,例如将数据库文件保存在了其它地方. 冗余: 数据有多份冗余,但不等备份,只能防止机械故障带来的数 ...

  9. dump mysql_mysql/mariadb知识点总结(28):mysql备份工具之mysqldump

    这篇文章包含了很多知识点,而这些知识点在之前的文章中都已经总结过,所以,如果阅读时遇到障碍请参考之前的文章. mysql系列文章列表直达链接:mysql知识点总结 如果你只是想找一些mysqldump ...

最新文章

  1. leetcode84 巨魔卡柱子
  2. iOS点击推送消息跳到应用指定页面
  3. get your subscription available at the moments on bilibili
  4. kettle于javascript步骤错误处理
  5. 毕业多年,我们转变了多少?
  6. Linux x8664汇编,Linux Udis86 反汇编引擎使用
  7. eva每一集片尾曲是谁唱的_求EVA新世纪福音战士的主题曲和片尾曲名字!!
  8. hb-550s计算机电源,XFX TS 550金牌电源拆解及电路分析
  9. 《ETL原理及应用》学习笔记 ·002【需求和数据建模】
  10. Atitit.项目修改补丁打包工具 使用说明
  11. Android APP压力测试 之Monkey日志自动分析脚本
  12. ssm仓库管理系统含论文
  13. HTML 使用字体图标 引入图标
  14. 找出大于200的最小质数
  15. 孤军奋战的百合网 下一城会在哪?
  16. 移动端 H5 概念术语(一)
  17. 第12章 Spring AOP之扩展篇
  18. 转载:Android底部导航栏,三种风格和实现
  19. com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store
  20. Reds 过期策略 内存淘汰策略 持久化策略

热门文章

  1. codeforces 651B B. Beautiful Paintings(贪心JAVA代码)
  2. 【Python】图片处理
  3. 很实用的五个杠杆炒股技巧
  4. Python爬虫编程思想(55):Beautiful Soup方法选择器之find_all方法
  5. matplotlib (一) 图的基本操作
  6. Well-known DEP-violating thunks
  7. Unity数据读写与存档(2)Json:成为神笔马良
  8. 销售订单行项的成本估算及其发布
  9. AI时代的降临:探寻我们的未来之路
  10. 祖母与猫 - 推荐图片组