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. Nginx负载均衡和LVS负载均衡的比较分析(转)

    Nginx负载均衡和LVS负载均衡的比较分析 作者:匿名 来源:ChinaZ源码报导 浏览:1032次 2011-12-6 15:12:27 字号:大 中 小 [摘要]Nginx是一个高性能的 HTT ...

  2. php对象序列化和cookie的问题,反序列化false

    php对象序列化和cookie的问题,反序列化false $searchKeywords = array("羊奶","肥皂"); $searchKeywords ...

  3. linux navicat 过期 解决办法

    :~$ cd .navicat:~/.navicat$ rm *.reg:~/.navicat$ rm .update-timestamp:~/.navicat$ rm navicat.crontab ...

  4. springmvc中action跳转

    return "redirect:/activity/listactivity.htm";

  5. iOS swift中比较模型数组是否相等

    在oc中,如果要比较模型数组中的元素是否相等一般重新isEqual方法即可 -(BOOL)isEqual:(id)object{ if (self == object) { return YES; } ...

  6. Java并发编程(十二)线程安全性的委托

    在组合对象中如果每个组件都已经是线程安全的,是否需要再加一个额外的"线程安全层",需要视情况而定. final可以修饰未复制的属性,只要在静态代码块或者构造函数中赋值了即可. 独立 ...

  7. 第一百六十四节,jQuery,常规选择器

    jQuery,常规选择器 学习要点: 1.简单选择器 2.进阶选择器 3.高级选择器 jQuery 最核心的组成部分就是:选择器引擎.它继承了 CSS 的语法,可以对 DOM 元 素的标签名.属性名. ...

  8. Hibernate集合映射

    可以在Hibernate中映射持久类的集合元素. 您需要从以下类型之一声明持久类中的集合类型: java.util.List java.util.Set java.util.SortedSet jav ...

  9. tomcat 测试页面显示

    首先下载匹配jdk版本的tomcat 解压即可使用 将完成的html文件直接放置到webapps目录下的子目录中是无法使用的 原因是tomcat默认加载的是jsp文件,且需要文件配置 所以,除去在we ...

  10. Android无线测试之—UiAutomator UiObject API介绍三

    拖拽与滑动 一.拖拽与滑动的示意图 二.拖拽与滑动相关的API 返回值 API 描述 boolean dragTo(UiObject destObj, int setps) 拖拽对象到另一个对象位置上 ...