一.xtrabackup介绍

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)它由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上唯一 一款开源的能够对innodb和xtradb数据库进行热备的工具。

特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
注意:xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表 但是innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力

二.下载安装xtrabackup

2.1下载xtrabackup的rpm包

https://www.percona.com/downloads/XtraBackup/LATEST/

2.2安装相关依赖包

[root@zha ~]# yum install -y prel-DBD-MySQL perl-DBI perl-Time-HiRes libaio*

2.3安装xtrabackup的rpm包

[root@zha ~]# rpm -ivh percona-xtrabackup--2.4.-.el6.x86_64.rpm
warning: percona-xtrabackup--2.4.-.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing... ########################################### [%]
:percona-xtrabackup- ########################################### [%]

如果报错:

[root@zha ~]# rpm -ivh percona-xtrabackup--2.4.-.el6.x86_64.rpm
warning: percona-xtrabackup--2.4.-.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
libev.so.()(64bit) is needed by percona-xtrabackup--2.4.-.el6.x86_64

提示缺少libev的rpm包

http://rpm.pbone.net/index.php3?stat=26&dist=74&size=74692&name=libev-4.15-1.el6.rf.x86_64.rpm(livev包下载地址)

安装libev包再安装xtrabackup即可

[root@zha ~]# rpm -ivh libev-4.15-.el6.rf.x86_64.rpm
warning: libev-4.15-.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing... ########################################### [%]
:libev ########################################### [%]

2.4 查看安装结果

[root@zha ~]# rpm -qa | grep xtrabackup
percona-xtrabackup--2.4.-.el6.x86_64
[root@zha ~]# rpm -ql percona-xtrabackup--2.4.-.el6.x86_64
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup--2.4.
/usr/share/doc/percona-xtrabackup--2.4./COPYING
/usr/share/man/man1/innobackupex..gz
/usr/share/man/man1/xbcrypt..gz
/usr/share/man/man1/xbstream..gz
/usr/share/man/man1/xtrabackup..gz

Xtrabackup中主要包含两个工具:
xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。

三.使用xtrabackup对MySQL完全备份

3.1完全备份

语法:innobackupex --user=用户名 --password=密码 备份目录位置
如果报错:Can't load '/usr/local/lib64/perl5/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.18: 无法打开共享对象 at /usr/bin/innobackupex line 18
需要拷贝libmysqlclient.so.18至/usr/lib64
cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
#完全备份到/mysql_backup/目录下

[root@zha ~]# innobackupex --user=root /mysql_backup/
:: completed OK! (出现ok即可)

备份后的文件:在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件。

查看备份后的数据

各文件说明:
(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;
(5)backup-my.cnf —— 备份命令用到的配置选项信息;

在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。
准备(prepare)一个完全备份
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

[root@zha --04_17--]# innobackupex --apply-log /mysql_backup/--04_17--/
:: completed OK!

在实现“准备”的过程中,innobackupex通常还可以使用–use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。

3.2 完全备份恢复

#复制目录到/zha下

[root@zha ~]# cp -r /mysql_backup/--04_17--/ /zha (以防玩脱)

#模拟数据库故障(关闭数据库并删除数据文件)

[root@zha ~]# /etc/init.d/mysqld stop
Shutting down MySQL. [ OK ]
[root@zha ~]# cd /usr/local/mysql/data/
[root@zha data]# ls
ibdata1 mysql-bin. performance_schema
ib_logfile0 mysql-bin. test
ib_logfile1 mysql-bin. zha
mysql mysql-bin.index zha.err
[root@zha data]# rm -rf *
[root@zha data]# ls (数据已经没有了)

#恢复

[root@zha data]# innobackupex --copy-back /mysql_backup/--04_17--/
:: completed OK!

如果报错Error: datadir must be specified. 意思是(在默认配置文件 /etc/my.cnf 中,没有找到 datadir 配置项)

vim /etc/my.cnf # 加入 datadir 配置项即可
datadir = /usr/local/mysql/data

#再次查看/data目录,数据已经恢复

[root@zha data]# ls
ibdata1 performance_schema
ib_logfile0 xtrabackup_info
ib_logfile1 xtrabackup_master_key_id
ibtmp1 zha
mysql

#修改权限启动mysql

[root@zha ~]# chown -R mysql:mysql /usr/local/mysql/data/
[root@zha ~]# /etc/init.d/mysqld start
Starting MySQL.. [ OK ]

四. 使用xtrabackup对MySQL增量备份

4.1创建测试库、表,然后插入测试数据

mysql> create database test character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table test (id int(10) not null,name varchhar(20));
Query OK, 0 rows affected (0.03 sec) mysql> insert into test values(1,'chenjiaxin');
Query OK, 1 row affected (0.01 sec)
mysql> insert into test values(1,'陈嘉欣');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+------------+
| id | name |
+----+------------+
| 1 | chenjiaxin |
| 1 | 陈嘉欣 |
+----+------------+
2 rows in set (0.00 sec)
mysql> exit;
Bye

#第一次完全备份

[root@zha ~]# innobackupex --user=root --database=test --no-timestamp /mysql_backup/
:: completed OK!

#第二次添加数据

mysql> use test;
Database changed
mysql> insert into test values(2,'test');
Query OK, 1 row affected (0.04 sec) mysql> exit;
Bye

#第一次增量备份

[root@zha mysql_backup]# innobackupex --user=root --database=test --no-timestamp --incremental-basedir=/mysql_backup/ --incremental /test2
:: completed OK!

# --incremental-basedir=/data/backup_db/test_incre 第一次增备指定全备路径
# --incremental 参数说明这是一次增备,并指定增备路径

4.2统计大小,验证是否为增量备份

[root@zha /]# du -sh /mysql_backup/
69M /mysql_backup/
[root@zha /]# du -sh /test2/
1.5M /test2/

至此增量备份已经完成!

注意: 第二次增备是在第一次增备的基础上,所以 --incremental-basedir 指定的是第一次增备目录,最后指定的第二次增备目录

[root@zha /]# cd /test2/
[root@zha test2]# cat xtrabackup_checkpoints
backup_type = incremental # backup_type 提示:这是一次增备
from_lsn = #from_lsn 提示:从上次结束开始1599380
to_lsn = #from_lsn 提示:到1600863结束
last_lsn =
compact =
recover_binlog_info =

Xtrabackup实现MySQL备份的更多相关文章

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

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

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

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

  3. 基于xtrabackup实现mysql备份还原

    简介 Xtrabackup2.2版之前包括4个可执行文件: innobackupex: Perl 脚本 xtrabackup: C/C++ 编译的二进制 xbstream: 支持并发写的流文件格式 x ...

  4. 使用Xtrabackup进行MySQL备份 zz

    zz from  http://www.magedu.com/ 一.安装 1.简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对i ...

  5. Mysql备份系列(1)--备份方案总结性梳理

    mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种备份方案: 一.binlog二进制日志通常作为备份的重要资源,所以再说备份方案之前先总结一下binlog日志 ...

  6. Mysql备份方案总结性梳理

    Mysql备份方案总结性梳理   服务器 mysql 日志 数据库 配置 Mariadb binlog   mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种 ...

  7. 使用 xtrabackup 进行MySQL数据库物理备份

    0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...

  8. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  9. mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

    注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数 ...

随机推荐

  1. 用 JS 做一个数独游戏(一)

    用 JS 做一个数独游戏(一) 数独的棋盘由 9x9 的方格组成,每一行的数字包含 1 ~ 9 九个数字,并且每一列包含 1 ~ 9 这 9 个不重复的数字,另外,整个棋盘分为 9 个 3x3 的块, ...

  2. POJ 1456——Supermarket——————【贪心+并查集优化】

    Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  3. 导出CSV

    public FileResult ExportExcel() { var sbHtml = new StringBuilder(); sbHtml.Append("<table bo ...

  4. JNI:在线程或信号处理函数中访问自定义类

    在写一个Tomcat应用,类需要被信号处理函数回调,可是在单独的程序中测试没用问题: void OnSingalHandler(int sig) { ... JNIEnv* env=NULL; if ...

  5. java环境下wsimport编译Wsdl

    使用命令提示符进行操作:首先CD至java jdk/bin目录下.先bin目录下执行以下命令即可: -----------------------------服务需求放置的位置------------ ...

  6. jQuery设置全选和全反选

    HTML 代码: <input type="checkbox" id="allChecked" onclick="setAllChecked(t ...

  7. Lync二次开发关于Lync启动退出问题

    以前使用C++开发的version.dll文件,由于各个用户环境的不同,造成某些用户加载不了我们开发的插件,并且写version.dll的同事还没找到好的解决办法,所以得换一种思路去解决这个问题,就是 ...

  8. ui.datepicker的回显问题

    应用场景: 页面上有一些现有的输入框,需要调用日期插件,同时还要clone一份,动态添加到页面中,动态生成的输入框在调用datepicker的时候,click事件有效,但是选择的时间无法回显到对应的输 ...

  9. 洛谷 P1266 速度限制

    题目描述 在这个繁忙的社会中,我们往往不再去选择最短的道路,而是选择最快的路线.开车时每条道路的限速成为最关键的问题.不幸的是,有一些限速的标志丢失了,因此你无法得知应该开多快.一种可以辩解的解决方案 ...

  10. 【2017-07-01】Linux应用开发工程师面试问题记录之二:关于结构体的大小及内存对齐问题

    Tencent后台服务器开发有一道题是计算一个结构体的sizeof的大小: struct strData { int m_Int; char m_Char; short m_Short; char m ...