Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

Xtrabackup简介

Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。

XtraBackup优势 :

1、无需停止数据库进行InnoDB热备

2、增量备份MySQL

3、流压缩到传输到其它服务器

4、能比较容易地创建主从同步

5、备份MySQL时不会增大服务器负载

Xtrabackup安装

这里只介绍Ubuntu-12.04下的安装方法,其它系统的安装方法请参考 http://www.percona.com/doc/percona-xtrabackup/2.1/installation.html

apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

在/etc/apt/sources.list加入:

2
3
deb http://repo.percona.com/apt precise main
deb-src http://repo.percona.com/apt precise main

执行update及安装操作

2
3
apt-get update
apt-get install percona-xtrabackup

注:precise是Ubuntu-12.04的版本代号,如果是其它系统版本,需要更换。 

Xtrabackup工具介绍

安装XtraBackup后,其实会有几个工具:

innobackupex:这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。但在处理Myisam时需要加一个读锁。

xtrabackup:一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。

xbcrypt:用来加密或解密备份的数据。

xbstream:用来解压或压缩xbstream格式的压缩文件。

建议使用perl封装的innobackupex来作数据库备份,因为比较容易使用。所以下面只介绍innobackupex的使用。其它的使用参考: http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html

innobackupex使用方法

完整的选项使用请执行innobackupex –help,这里只介绍使用常用的选项进行完整备份及增量备份和还原。

innobackupex Options 这里只对常用参数进行描述

–defaults-file 数据库的配置文件路径,感觉本地备份不写也可以,远程没测试过。

–apply-log 准备在一个备份上启动mysql服务。

–copy-back 从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

–no-timestamp 创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base

–databases 用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″

–incremental 在全备份的基础上进行增量备份,后跟增量备份存贮目录路径

–incremental-basedir=DIRECTORY 增量备份所需要的全备份路径目录或上次做增量备份的目录路径

–incremental-dir=DIRECTORY 增量备份存贮的目录路径

–redo-only 用于准备增量备份内容把数据合并到全备份目录,配合–incremental-dir 增量备份目录使用。

–force-non-empty-directories 如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。

其他具体参数可以参考:http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/innobackupex_option_reference.html

完整备份及还原

一、全部数据库

备份:

innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/full_backup

还原:

7
8
9
10
11
12
13
14
15
16
17
18
19
service mysql stop
 
rm -rf /var/lib/mysql
 
mkdir /var/lib/mysql
 
innobackupex --apply-log /data/mysql_backup/full_backup --use-memory=1G --user=root --password=root
 
innobackupex --copy-back /data/mysql_backup/full_backup
 
chown mysql:mysql -R /var/lib/mysql
 
service mysql start

查看恢复的数据库

二、指定数据库

备份:

假如我们要备份centos和aabb数据库。

innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf --databases="centos aabb" /data/mysql_backup/

这样就会在/data/mysql_backup生成一个带时间的目录,如果不需要带时间,可以使用选项–no-timestamp。

如果想备份成压缩文件,可以使用如下语句:

innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf --databases="centos aabb" --no-timestamp --stream=tar ./ | gzip - > centos-aabb.bz.tar.gz

还原:

假如完整备份的路径为/data/mysql_backup/full_backup,如果完整备份是压缩文件,需要先解压再还原。

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
service mysql stop
 
rm -rf /var/lib/mysql/ibdata*
 
rm -rf /var/lib/mysql/ib_logfile*
 
rm -rf /var/lib/mysql/centos
 
rm -rf /var/lib/mysql/aabb
 
innobackupex --apply-log /data/mysql_backup/centos_aabb_full_backup
 
innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_aabb_full_backup
 
chown -R mysql:mysql /var/lib/mysql
 
service mysql start

增量备份及还原

在这里全库的增量备份方法就不多讲了,只是针对特定数据库进行讲解,其实是同理的就是把下面参数中的–databases 选项去掉就可以,感兴趣的可以自己试下。

增量备份是建立在完整备份的基础上的,所以首先确保已经完整备份了一次。

完整备份:

innobackupex --user=root --password=root --databases="centos" --no-timestamp /data/mysql_backup/centos_full_backup

现在完整备份的目录为/data/mysql_backup/centos_full_backup。

增量备份:

第一次增量备份:

innobackupex --incremental /data/mysql_backup/inc1 --no-timestamp --incremental-basedir=/data/mysql_backup/centos_full_backup --user=root --password=root --defaults-file=/etc/mysql/my.cnf

第二次增量备份:需要把–incremental-basedir指定到上次做增量备份的目录,这里应该知道/data/mysql_backup/inc1

innobackupex –incremental /data/mysql_backup/inc2 –no-timestamp –incremental-basedir=/data/mysql_backup/inc1 –user=root –password=root –defaults-file=/etc/mysql/my.cnf

选项–incremental是指定作增量备份 –incremental-basedir选项是指定上一次增量备份的目录(如果是第一次作增量备份,则为完整备份的目录)。

还原:

增量备份的还原操作跟完整的还原有点不一样,首先必须使用–apply-log –redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。

对每个备份目录作apply-log redo-only操作(包括完整备份)

3
4
5
6
7
innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --user=root --password=root
 
innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --incremental-dir=/data/mysql_backup/inc1 --user=root --password=root
 
innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --incremental-dir=/data/mysql_backup/inc2 --user=root --password=root

看到有文章在恢复增量备份的时候提到在做最后一个读取增量记录的时候不使用–redo-only 参数, 经过测试,使用了此参数后恢复的数据库也都运行正确,我使用的是2.17版本xtrabackup, 至于以前版本就没测试过。有知道的可以在这里分享下。

下面就跟还原完整备份时一样了:

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
service mysql stop
 
rm -rf /var/lib/mysql/ibdata*
 
rm -rf /var/lib/mysql/ib_logfile*
 
rm -rf /var/lib/mysql/centos
 
innobackupex --apply-log /data/mysql_backup/centos_full_backup --use-memory=1G --user=root --password=root
 
##--use-memory 能够定义读取备份时的内存大小,以便快速的完成还原准备工作。
 
innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_full_backup
 
chown mysql:mysql -R /var/lib/mysql
 
service mysql start

现在全部增量恢复就完成了,可以登录数据库查看下恢复的数据了 
稍后再介绍给大家xtrabackup备份InnoDB的方法。

Percona备份mysql全库及指定数据库(完整备份与增量备份)的更多相关文章

  1. Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

    原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...

  2. mysql全库搜索指定字符串

    mysql全库搜索指定字符串 DELIMITER // DROP PROCEDURE IF EXISTS `proc_FindStrInAllDataBase`; # CALL `proc_FindS ...

  3. 挖一挖MongoDB的备份与还原(实现指定时间点还原和增量备份还原)

    一  研究背景需求 目前作者所在公司的MongoDB数据库是每天凌晨做一次全库完整备份,但数据库出现故障时,只能保证恢复到全备时间点,比如,00:30 做的完整备份,而出现故障是下午18:00,那么现 ...

  4. 从MySQL全库备份中恢复某个库和某张表【转】

    从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...

  5. Percona XtraBackup不锁库搭建slave数据库-基于GTID

    Percona XtraBackup不锁库搭建slave数据库-基于GTID 1.下载安装epel源并安装 wget http://ftp.cuhk.edu.hk/pub/linux/fedora-e ...

  6. 批处理向FTP上传指定属性的文件 批处理增量备份的例子

    使用windows批处理向FTP上传具有指定属性的文件,类似增量备份功能. 对一个目录里的几个文件自动上传FTP时只上传有归档属性的文件,然后FTP上传成功后自动清除(本机)刚上传文件的归档属性. 类 ...

  7. 从mysql全库备份中恢复指定库和指定表

    需求:开发要求导入某天某个表的数据,而我们的数据是全库备份 例如:  从newbei_2017-08-31_402793782.tar.bz2中恢复表:bei_table 的数据 一.备份策略 备份全 ...

  8. 从MySQL全库备份中恢复某个库和某张表

    在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-d ...

  9. 【Oracle】增量备份和全库备份怎么恢复数据库

    1差异增量实验示例 1.1差异增量备份 为了演示增量备份的效果,我们在执行一次0级别的备份后,对数据库进行一些改变. 再执行一次1级别的差异增量备份: 执行完1级别的备份后再次对数据库进行更改: 再执 ...

随机推荐

  1. webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc ((); 或者 Unexpected token: operator (>)

    webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc (();  或者 Unexpected token: operator (>) 解决方案 ...

  2. Spring mvc 注解@ResponseBody 返回内容编码问题

    @ResponseBody 在@Controller 类方法中能够让字符串直接返回内容. 其返回处理的类是org.springframework.http.converter.StringHttpMe ...

  3. MySQL的索引(中)

    连着发了几天文章,从我收到的反映来说,大家觉着还不错,可以很清晰的看到知识的脉络,但是这个还不错是针对传统的文章的无聊.不明确.完全不考虑考虑用户体验的角度上对比出来的.掌握一门知识还是不容易的,有的 ...

  4. \sum的写法

    \sum默认上下标是写在右上角和右下角的.在独立公式中,则是写在上面和下面的.对于行内公式,我们也可以强制用\limits让其上下表标出现在上面和下面.Note:\sum\nolimits的作用相当于 ...

  5. php或js判断网站访问者来自手机或者pc端源码

    很多时候也可以通过逻辑程序来进行判断,如PHP.JS是常用的两种识别访问设备类型的常用方法. 原理都是采用识别访问客户端的HTTP_USER_AGENT,然后进行关键字匹配进行确定设备类型,对于伪造H ...

  6. Easyui Form增加myLoad方法,使其支持二级数据对象

    $.extend($.fn.form.methods, { myLoad : function (jq, param) { return jq.each(function () { load(this ...

  7. 通过Bag一对多映射示例(使用xml文件)

    如果持久化类具有包含实体引用的列表对象,则需要使用一对多关联来映射列表元素. 我们可以通过列表(list)或包(bag)来映射这个列表对象. 请注意,bag不是基于索引的,而list是基于索引的. 在 ...

  8. android JNI常用添加log方法

    android JNI 打log方法 添加库支持 LOCAL_LDLIBS :=-llog -landroid 包含头文件 #include <android/log.h> #define ...

  9. ios -解决view遮挡按钮问题

    #pragma mark -解决view遮挡按钮问题 //分享按钮赋予 self 最顶部 / web按钮赋予 self 最顶部 / showBtn显示按钮 self 最顶部 / scrollviews ...

  10. Android错误——基础篇

    1. Android工程在真机上运行调试: 花了二个小时的时间来把App热部署到小米机上,简直让我寒透了心, 原本是按照网上提供的步骤一步步的做着,没想到小米神机居然出的是什么内测小米助手,两个窗口来 ...