add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本,

可以成功备份和恢复指定的数据库。

原文:http://www.drupal001.com/2014/02/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的特性是针对大数据进行备份恢复使用,数据库大小一般在G以上或10G以上,对于数据量小的Mysql库完全可以使用mysqldump来解决,备份和恢复速度快而且操作简便快捷,这里对mysqldump命令就不做介绍了。

Xtrabackup安装

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

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

在/etc/apt/sources.list加入下面两句:

deb http://repo.percona.com/apt trusty main
deb-src http://repo.percona.com/apt trusty main
 

执行update及安装操作,在安装之前,要先用apt-get检查一下将要安装的xtrabackup的版本,看它是否支持你的数据库版本。

我就吃了这个亏,安装的是percona-xtrabackup2.2.6,它是基于MySQL5.6.21,而我安装的是MySQL5.6.22,虽然这个

两个版本差异非常小,但还是担心用percona-xtrabackup时会出错。percona-xtrabackup依赖于libdbd-mysql-perl,因此

如果安装percona-xtrabackup出错,可以尝试sudo apt-get -f install percona-xtrabackup。

sudo apt-get update
sudo apt-get install percona-xtrabackup
 

注:trusty是Ubuntu-14.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.2/manual.html

innobackupex使用方法

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

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

--defaults-file 数据库的配置文件路径。

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

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

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

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

--include  功能与databases差不多

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

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

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

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

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

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

首先要在mysql中创建一个有备份权限的用户,赋予该用户replication client, reload两个权限,如下

mysql> create user 'repl'@'localhost' identified by ''
mysql> grant replication client, reload on *.* to 'repl'@'localhost'

完整备份及还原

一、全部数据库

备份:

innobackupex --user=repl --password=123 --defaults-file=/etc/mysql/my.cnf  /data/mysql_bk/full_backup
 

还原:

service mysql stop

rm -rf /var/lib/mysql

mkdir /var/lib/mysql

innobackupex --apply-log /data/mysql_bk/full_backup --use-memory=1G --user=root --password=root

innobackupex --copy-back /data/mysql_bkfull_backup

chown mysql:mysql -R /var/lib/mysql

service mysql start
 

查看恢复的数据库

二、指定数据库

备份:

假如我们要备份mydb数据库,如果备份多个数据库,那用空格分隔,如--databases="mydb mygirldb",

最好加sudo

sudo innobackupex --user=repl --password=123 --defaults-file=/etc/mysql/my.cnf --databases="mydb" /data/mysql_bk/
 这样就会在/data/mysql_backup生成一个带时间的目录,如果不需要带时间,可以使用选项–no-timestamp。

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

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

还原:

#恢复备份前,先停止mysql
sudo service mysql stop #删除datadir目前下mydb, xtrabackup_info, id*(即ibdata1,ib_logfile0,...,ib_logfileN)
cd /var/lib/mysql
rm -rf mydb xtrabackup_info ib*

#需要当前用户有/var/lib/mysql/目录下写权限,因此最好用sudo
sudo innobackupex --apply-log --user=repl --password= --defaults-file=/etc/mysql/my.cnf /data/mysql_bk/--18_16--12
sudo innobackupex --copy-back --force-non-empty-directories --user=repl --password= --defaults-file=/etc/mysql/my.cnf /data/mysql_bk/--18_16-- #我们需要在调用上面的命令成功后,要修改datadir目录下的文件的所有者和所属组,如果不改,在sudo service mysql start时,启不来
#错误日志为./ibdata1 can't be opened in read-write mode innobackupex。需要将database目录下的所有文件的所有者和所属组
#更改为mysql用户,该用户是linux用户,在创建数据库时就创建好了
chown -R mysql:mysql /var/lib/mysql
sudo service mysql start

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

 

增量备份及还原

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

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

完整备份:

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

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

增量备份:

第一次增量备份:

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

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

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

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

还原:

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

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

innobackupex --apply-log --redo-only /data/mysql_bk/centos_full_backup --user=root --password=root

innobackupex --apply-log --redo-only /data/mysql_bk/centos_full_backup --incremental-dir=/data/mysql_backup/inc1 --user=root --password=root

innobackupex --apply-log --redo-only /data/mysql_bk/centos_full_backup --incremental-dir=/data/mysql_backup/inc2 --user=root --password=root
 

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

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

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_bk/centos_full_backup --use-memory=1G --user=root --password=root

##--use-memory 能够定义读取备份时的内存大小,以便快速的完成还原准备工作。

innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_bk/centos_full_backup

chown mysql:mysql -R /var/lib/mysql

service mysql start
 

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

Percona Xtrabackup备份mysql(转)的更多相关文章

  1. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)     文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 inno ...

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

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

  3. Percona Xtrabackup 备份MySQL 实例(转)

    老规矩,开场白,刚开始用mysqldump,备份100G+的数据库,再加上服务器繁忙,备份速度像蜗牛似的,于是寻找更高效的备份方法.网上都说用xtrabackup比较适合备份大的数据库,而且备份效率也 ...

  4. 利用xtrabackup备份mysql数据库

    利用xtrabackup备份mysql数据库 一.安装1.直接下载二进制文件wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2. ...

  5. MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]

    MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份] 1.Xtrabackup的安装 percona-xtrabackup-2.2.3-4982.el6.x86_ ...

  6. 使用Percona Xtrabackup创建MySQL slave库

    一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...

  7. xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files'

    xtrabackup备份MySQL报错:InnoDB: Error number 24 means 'Too many open files' 1.使用xtrabackup备份MySQL时出现如下报错 ...

  8. MySQL · 物理备份 · Percona XtraBackup 备份原理

    http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...

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

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

随机推荐

  1. URAL1049. Brave Balloonists

    1049 求约数的个数 质因子数的个数+1相乘 #include <iostream> #include<cstdio> #include<cstring> #in ...

  2. C# Winform 获取天气情况

    WebServices(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx)来实现天气预报,该天气预报 Web 服务,数据来源于中国 ...

  3. CSS的display属性

    网页设计中最常用的标签p.div.h1-h6(默认为块级元素),span(默认为内联元素) 内联,内嵌,行内属性标签: 1.默认同行可以继续跟同类型标签: 2.内容撑开宽度 3.不支持宽高 4.不支持 ...

  4. Mybatis传递多个参数

    方法一: //DAO层的函数方法Public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...

  5. JSAPI微信支付返回错误:fail_no permission to execute

    问题描述 fail_no permission to execute 一定是授权目录出问题了,因为没有权限. 开发环境及可能造成的原因 这次的微信开发是用的Mvc4,支付的封装代码不会有问题(用过很多 ...

  6. HDU 1016 Prime Ring Problem

    在刚刚写完代码的时候才发现我以前交过这道题,可是没有过. 后来因为不理解代码,于是也就不了了之了. 可说呢,那时的我哪知道什么DFS深搜的东西啊,而且对递归的理解也很肤浅. 这道题应该算HDU 261 ...

  7. 51nod1199 Money out of Thin Air

    链剖即可.其实就是利用了链剖后子树都在一段连续的区间内所以可以做到O(logn)查询和修改. 线段树细节打错了..要专心!肉眼差错都能找出一堆出来显然是不行的!. #include<cstdio ...

  8. fmri的图像数据在matlab中显示,利用imagesc工具进行显示,自带数据集-by 西南大学xulei教授

    这里包含了这样一个数据集:slice_data.mat. 这个数据集中包含的mri数据是:64*64*25.共有25个slice.每个slice的分辨率是64*64. 程序非常简短: load sli ...

  9. ecshop 在首页每个商品下显示已销售数量

    1.在includes/lib_goods.php文件末尾加入以下代码 function get_buy_sum($goods_id) { $sql = "select sum(goods_ ...

  10. 计算机视觉入门 Intorduction To Computer Vision

    本文将主要介绍图像分类问题,即给定一张图片,我们来给这张图片打一个标签,标签来自于预先设定的集合,比如{people,cat,dog...}等,这是CV的核心问题,图像分类在实际应用中也有许多变形,而 ...