一.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. 为什么阿里云服务器的docker启动tomcat这么慢??

    https://blog.csdn.net/tianyiii/article/details/79314597 最近在阿里云服务器使用Docker启动Tomcat,发现tomcat服务器启动过程很慢. ...

  2. EditPlus编写PHP使用技巧

    1,建立php模板 方法:在EditPlus的文件目录下,新建template.php文件,写入<?php ?>内容保存,再在editplus的模板中 载入应用即可. 2,建立函数自动补齐 ...

  3. 动态配置log4j2.xml日志输出文件的位置

    目标:根据启动jar时传进main()的参数动态修改日志位置 一.修改启动项 MainMapLookup.setMainArguments(args);注:不要在lookup设置之前初始化log(如: ...

  4. input type="file"获取文件名方法

    文件上传比较丑,样式调整时会有一个获取文件名,或者包含文件路径的文件名的方法 html代码 <div class="file-box"> <form id=&qu ...

  5. C++常用字符串分割方法(转)

    1.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串, ...

  6. 框架: namespace和use的区别以及使用注意项

    我们在使用框架的时候,总会使用到namespace和Use这两个东西,我们先来看它们存在的意义 namespace:是指我们当前类中,所在的位置.使用namespace关键字的话,我们就可以达到效果: ...

  7. SAP成都研究院大卫哥:SAP C4C中国本地化之微信小程序集成

    今天的文章来自Wu David,SAP成都研究院C4C开发团队的架构师,在加入团队之前曾经在SAP上海研究院工作,组内同事习惯亲切地称呼他为大卫哥. 大卫哥身高据Jerry目测有1米8以上,是成都C4 ...

  8. IOS NSOperationQueue(线程 封装操作)

    #import "HMViewController.h" @interface HMViewController () @end @implementation HMViewCon ...

  9. IOS 制作常用代码的快捷方式

    输入可以变的对象或类型,要用<#name#>

  10. eplise一键集成工具

    因为要做平台,后台的内容就由我负责,目前想让测试人员  在本地使用eplise可以进行脚本开发,但是很多人都死在了搭建环境的道路上,那我就做了一键集成,点击就可以把所需要的配置项进行配置,总结:实际就 ...