简介

Xtrabackup2.2版之前包括4个可执行文件:

innobackupex: Perl 脚本
xtrabackup: C/C++ 编译的二进制
xbstream: 支持并发写的流文件格式
xbcrypt: 加解密 xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 MySQLServer 没有交互;innobackupex 脚本用来备份非 InnoDB 表,同时会调用xtrabackup 命令来备份 InnoDB 表,还会和 MySQL Server 发送命令进行交互,如加全局读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。即innobackupex是在xtrabackup 之上做了一层封装实现的;mysqldump默认是不支持增量备份的(mysqldump实现增量备份靠的是二进制日志),xtrabackup支持增量备份

xtrabackup下载地址

https://www.percona.com/downloads/Percona-XtraBackup-2.4/
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/          #最新版本下载

xtrabackup备份过程

棕色线条是备份MyISAM存储引擎的表,绿色线条是备份InnoDB存储引擎的表;
innobackupex启动后先调用xtrabackup,xtrabackup启动两个线程,一个线程先备份redo(事务日志);
拷贝上事务日志之后,开启另一个线程备份ibd文件(ibd是存放数据库以及索引的文件),备份完ibd文件之后通知innobackupex;
备份完ibd文件后,innobackupex脚本会加全局读锁备份MyISAM相关的表;
MyISAM表备份完之后通知备份redo的线程,停止备份事务日志,线程收到通知后会停止备份并且告知innobackupex;
innobackupex进行解锁,通知xtrabackup停止备份,xtrabackup回复完之后备份结束; 新版本的xtrabackup中xtrabackup和innobackupex已经合二为一,innobackupex作为xtrabackup的软链接

xtrabackup选项用法

--user:该选项表示备份账号
--password:该选项表示备份的密码
--host:该选项表示备份数据库的地址
--databases:该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指
定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表
--defaults-file:该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置
--incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir
--incremental-basedir:该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用
--incremental-dir:该选项表示还原时增量备份的目录
--include=name:指定表名,格式:databasename.tablename
--backup:备份
--prepare:预处理
--apply-log-only:阻止回滚未完成的事务
--target-dir:指定目标位置
--apply-log:一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因
此,此时数据文件仍处理不一致状态。此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
--use-memory:和--apply-log选项一起使用,当prepare 备份时,做crash recovery分配的内存大小,单位字节,也可1MB,1M,1G,1GB等,推荐1G(快速还原)
--export:表示开启可导出单独的表之后再导入其他Mysql中
--redo-only:此选项在prepare base full backup,往其中合并增量备份时候使用,但不包括对最后一个增量备份的合并
--copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir
--move-back:这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场景:没有
足够的磁盘空间同时保留数据文件和Backup副本
--force-non-empty-directories:指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果
--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败

还原注意事项:

1、datadir 目录必须为空。除非指定innobackupex --force-non-emptydirectorires选项指定,否则--copy-back选项不会覆盖
2、在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中
3、.由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户chown -R mysql:mysql /data/mysql
以上需要在用户调用innobackupex之前完成

xtrabackup还原过程

t0点做完全备份,t1、t2点都做增量备份(第一次增量备份前都需要一个完全备份);上图中,有可能会出现t1点做增量备份之前有一个事务正在执行,t1点做完增量备份之后事务还没完成,这样会造成事务跨备份点了,相当于t1点增量备份中有一半事务的备份,另一半的事务没有做备份;同理,t2点也会出现这种情况;

xtrabackup还原的两个步骤:
1、预处理:当需要还原数据库到t2点时,需要t0的完全备份和t1、2的增量备份;xtrabackup把备份复制到一个第三方目录中,用完全备份加上t1点的增量备份,再
加上t2点的增量备份,但t2点的增量备份中有可能出现一半的事务备份,所以会把t2点的备份进行事务回滚(撤销不完整的事务);备份还原时,前面的
备份都不做事务回滚,只有需要还原的最后一次增量备份才做事务滚动
2、还原:把预处理完的备份文件复制到数据库所在目录 完全备份也会出现备份一半事务的情况,当数据库启动会发现不完整事务,系统会自动回滚

备份生成的相关文件

使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备份目录中创建如下文件:
(1)xtrabackup_info:innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置;数
据库的数据存放在一个个16K的数据块中,每当修改一个数据块的数据,则这个数据块的事务id号就会更改;当做备份时,假如备份完成后最
大的事务id为1000,则1000id之前的都做过备份,1000之后的id则都未做备份,LSN即事务id
(2)xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个
日志序列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的
(3)xtrabackup_binlog_info:MySQL服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复
(4)backup-my.cnf:备份命令用到的配置选项信息
(5)xtrabackup_logfile:备份生成的日志文件

xtrabackup完全备份还原

备份

准备两台机器

[root@centos7 ~]# yum install percona-*.rpm     #安装xtrabackup
[root@centos7 ~]# rpm -ql percona-xtrabackup-24 #查看包都包含了哪些文件
[root@centos7 ~]# mkdir /backup #创建备份目录
[root@centos7 ~]# mysql -e 'show databases;' #提前准备好数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| db2 |
| db3 |
| mysql |
| performance_schema |
+--------------------+
[root@centos7 ~]# xtrabackup --backup --target-dir=/backup/ #做完全备份到指定目录
[root@centos7 ~]# scr -r /backup/ 192.168.38.37:/ #把备份目录拷贝到远程主机的根下;备份尽量不要放在本机上

还原

[root@localhost ~]# yum install percona*.rpm
[root@localhost ~]# systemctl stop mariadb #还原数据库期间需要停止用户访问
[root@localhost ~]# rm -rf /var/lib/mysql/* #还原时要清除数据库目录下的所有文件
[root@localhost ~]# mkdir /restore #准备一个预处理用的第三方目录
[root@localhost ~]# cp -ra /backup/* /restore/ #把备份的数据拷贝到预处理用的目录下
[root@localhost ~]# xtrabackup --prepare --target-dir=/restore/ #指定目录进行预处理;完全备份还原,不需要阻止日志回滚,系统会自动回滚日志
[root@localhost ~]# xtrabackup --copy-back --target-dir=/restore/ #把处理过的备份还原(拷贝)到数据库目录;xtrabackup会自动检查mysql的配置文件,从而找到数据库的目录
[root@localhost ~]# ll /var/lib/mysql/ #会发现文件的所有者和所属组都是当前系统默认用户
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql/ #更改数据库目录的所有文件的所有者和所属组为Mysql
[root@localhost ~]# systemctl start mariadb #恢复服务
[root@localhost ~]# mysql -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| db2 |
| db3 |
| mysql |
| performance_schema |
+--------------------+

xtrabackup增量备份还原

备份

[root@centos7 ~]# yum install mariadb-server percon*.rpm      #需要开启epel源,有的包依赖于epel源
[root@centos7 ~]# systemctl start mariadb
[root@centos7 ~]# mkdir /backup #创建备份目录
[root@centos7 ~]# mysql
MariaDB [(none)]> create database db1;
MariaDB [(none)]> use db1;
MariaDB [(none)]> create table t1(id int); #创建个空表
MariaDB [db1]> quit
[root@centos7 ~]# xtrabackup --backup --target-dir=/backup/base #创建完全备份,base目录自动生成
[root@centos7 ~]# mysql db1
MariaDB [db1]> insert t1 value(1),(2);
MariaDB [db1]> quit
[root@centos7 ~]# xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base #创建基于base完全备份的增量备份inc1
[root@centos7 ~]# mysql db1;
MariaDB [db1]> insert t1 value(3),(4);
MariaDB [db1]> select * from t1;
>+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+
MariaDB [db1]> quit
[root@centos7 ~]# xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1 #创建基于inc1备份的增量备份inc2
[root@centos7 ~]# scp -r /backup/ 192.168.38.37:/ #把所有备份拷贝到远程主机

还原

[root@localhost ~]# yum install percona*.rpm -y
[root@localhost ~]# systemctl stop mariadb #还原过程需要先暂停服务,停止用户访问
[root@localhost ~]# mkdir /restore #创建预处理备份的第三方目录
[root@localhost ~]# cp -r /backup/* /restore/ #把备份拷贝到预处理目录
[root@localhost ~]# xtrabackup --prepare --apply-log-only --target-dir=/restore/base #预处理完全备份,禁止事务回滚
[root@localhost ~]# xtrabackup --prepare --apply-log-only --target-dir=/restore/base --incremental-dir=/restore/inc1 #把增量备份inc1预处理,并且和完全备份合并
[root@localhost ~]# xtrabackup --prepare --target-dir=/restore/base --incremental-dir=/restore/inc2 #预处理增量备份inc2,inc2是最后一个增量备份,所以需要进行事务回滚,并且与完全备份合并
[root@localhost ~]# rm -rf /var/lib/mysql/* #还原前,删除数据库目录下的所有文件目录
[root@localhost ~]# xtrabackup --copy-back --target-dir=/restore/base #把预处理的备份还原(拷贝)到数据库的目录下
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql/ #修改数据库的所有文件的所有者所属组为Mysql;如果不修改,默认数据库文件的所有者所属组是备份时的当前用户,启动mysql服务时会造成数据库服务无法启动
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql db1
MariaDB [db1]> select * from t1;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
+------+

基于xtrabackup实现mysql备份还原的更多相关文章

  1. Percona XtraBackup 关于 MySQL备份还原的详细测试

    一. Percona XtraBackup 的优点. (1)无需停止数据库进行InnoDB热备: (2)增量备份MySQL: (3)流压缩传输到其它服务器: (4)在线移动表: (5)能够比较容易地创 ...

  2. 使用第三方工具Xtrabackup进行MySQL备份

    使用Xtrabackup进行MySQL备份: 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtr ...

  3. (4.5)mysql备份还原——深入解析二进制日志(1)binlog的3种工作模式与配置

    (4.5)mysql备份还原——深入解析二进制日志(binlog) 关键词:二进制日志,binlog日志 0.建议 (1)不建议随便去修改binlog格式(数据库级别) (2)binlog日志的清理 ...

  4. (4.3)mysql备份还原——mysql备份策略

    (4.3)mysql备份还原——mysql备份策略 1.指定备份策略时需要考虑的点 [1.1]备份周期:2次备份间隔时长 [1.2]备份方式:在备份周期中,使用什么备份方式.备份模式 [1.3]实现方 ...

  5. (4.8)mysql备份还原——binlog查看工具之show binlog的使用

    (4.8)mysql备份还原——binlog查看工具之mysqlbinlog及show binlog的使用 关键词:show binlog,mysql binlog查看,二进制文件查看,binlog查 ...

  6. (4.1)mysql备份还原——mysql常见故障

    (4.1)mysql备份还原——mysql常见故障 1.常见故障类型 在数据库环境中,常见故障类型: 语句失败,用户进程失败,用户错误 实例失败,介质故障,网络故障 其中最严重的故障主要是用户错误和介 ...

  7. (4.16)mysql备份还原——物理备份之XtraBackup实践

    关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...

  8. MySQL备份还原之三使用xtrabackup

    1 xtrabackup安装 1)解压源码包 tar -xzvf percona-xtrabackup-2.1.7.tar.gz 2)安装perl环境(DBI/DBD) yum install per ...

  9. Xtrabackup实现MySQL备份

    一.xtrabackup介绍 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)它由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上 ...

随机推荐

  1. Hadoop 在 windows 7 64位的配置(一)|非cygwin

    参照原文   http://blog.csdn.net/supperman_009/article/details/39991809 环境: Hadoop-2.4.1 Windows 7 64位 jd ...

  2. 主流 CSS 布局(水平居中、垂直居中、居中 )

    什么是布局 html 页面的整体结构或骨架 布局不是某个技术内容 而是一种设计思想 [ 布局方式 ] 水平居中布局 垂直居中布局 居中布局( 水平 + 垂直 ) 什么是水平居中布局 水平居中布局 元素 ...

  3. 微软并发Key-Value存储库FASTER介绍

    微软支持并发的Key-Value 存储库有C++与C#两个版本.号称迄今为止最快的并发键值存储.下面是C#版本翻译: FASTER C#可在.NET Framework和.NET Core中运行,并且 ...

  4. 数据结构(四十四)交换排序(1.冒泡排序(O(n²))2.快速排序(O(nlogn))))

    一.交换排序的定义 利用交换数据元素的位置进行排序的方法称为交换排序.常用的交换排序方法有冒泡排序和快速排序算法.快速排序算法是一种分区交换排序算法. 二.冒泡排序 1.冒泡排序的定义 冒泡排序(Bu ...

  5. Mustache 入门教程

    Mustache 简介: Mustache 是一个轻逻辑模板解析引擎,它的优势在于可以应用在 Javascript.PHP.Python.Perl 等多种编程语言中. Mustache 语法: Mus ...

  6. SpringBoot中教你手把手配置 https

    升级 https 记录 1.去阿里云购买证书(免费版),并提交审核资料 购买的证书 2.下载证书 下载证书 3.查看上图页面的第三步 JKS证书安装 4.在证书目录下执行阿里云提供的命令,密码都填 p ...

  7. Project Euler 57: Square root convergents

    五十七.平方根收敛(Square root convergents) 二的平方根可以表示为以下这个无穷连分数: \[ \sqrt 2 =1+ \frac 1 {2+ \frac 1 {2 +\frac ...

  8. 「Luogu 1349」广义斐波那契数列

    更好的阅读体验 Portal Portal1: Luogu Description 广义的斐波那契数列是指形如\(an=p \times a_{n-1}+q \times a_{n-2}\)的数列.今 ...

  9. 『题解』[NOI2016]优秀的拆分

    如果一个字符串可以被拆分为\(AABB\)的形式,其中$A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串\(aabaabaa\),如果令\(A=aab\),\(B=a\ ...

  10. Android9.0 SystemUI 网络信号栏定制修改

    前情提要 Android 8.1平台SystemUI 导航栏加载流程解析 9.0 改动点简要说明 1.新增 StatusBarMobileView 替代 SignalClusterView,用以控制信 ...