title: 1.percona-xtrabackup备份mysql

date: 2016-04-10 23:19:12

tags: mysql

categories: mysql

一、percona-xtrabackup

它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份。它不暂停服务创建Innodb热备份;

为mysql做增量备份;在mysql服务器之间做在线表迁移;使创建replication更加容易;备份mysql而不增加服务器的负载。

percona是一家老牌的mysql技术咨询公司。它不仅提供mysql的技术支持、培训、咨询,还发布了mysql的分支版本--percona Server。并围绕

percona Server还发布了一系统的mysql工具。

innobackupex比xtarbackup有更强的功能,它整合了xtrabackup和其他的一些功能,他不但可以全量备份/恢复,还可以基于时间的增量备份与恢复。

innobackupex备份原理

innobackupex首先调用xtrabackup来备份innodb数据文件,当xtrabackup完成后,innobackupex就查看文件 xtrabackup_suspended ;然后执行“FLUSH TABLES WITH READ LOCK”来备份其他的文件

innobackupex恢复原理

innobackupex首先读取my.cnf,查看变量

(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir)

对应的目录是存在,确定相关目录存在后,然后先copy myisam表和索引,然后在copy innodb的表、索引和日志。

=================================================================================

环境:

centos6.6

数据库:mysql5.5.16

xtrabackup:v1.5.1

=================================================================================

1)完整备份

命令:innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE BACK_DIR_PATH

1. # PASSWORD 数据库密码
2. # DATE 数据库名
3. # --database=DATE 针对所有库做备份去掉该选项即可
4. # BACK_DIR_PATH 完全备份目录位置
5. 注:该命令执行后会在备份目录位置以当前时间为命名生成一个目录,备份的文件会备份到该目录中。例如2014-12-06_16-00-15
6. #--port=端口号
7. #--no-timestamp 此参数可以取消自动时间戳

2)完整备份的恢复

  1. 首先需要备份数据库

  2. 停止数据库运行

  3. 删除数据库目录内所有文件

  4. 然后执行下列命令进行恢复

  5. 恢复第一步:应用日志。

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --apply-log BACK_DIR_PATH/你的全备数据库文件名

    参数:

    PASSWORD 数据库密码

    DATE 数据库名

    BACK_DIR_PATH 完全备份目录位置

    恢复第二步:拷贝文件。

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --copy-back /BACK_DIR_PATH

注释一下,常用的参数。

--defaults-file=/etc/my.cnf     恢复会使用my.cnf文件把需要恢复的文件,恢复到my.cnf指定的位置。
--apply-log 这是备份时产生的日志,
--copy-back 这是备份源,解压后的备份文件。
--database=DATE 如果不加此参数,默认恢复全部数据库

提示:如果重启服务报错。文章结尾有解决办法。

3)增量备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --incremental-basedir=BACK_DIR_PATH/全备数据库的文件名 --incremental BACK_DIR_ZENG_1

2. # PASSWORD 数据库密码
3. # DATE 数据库名
4. # BACK_DIR_PATH 完全备份目录位置
5. # BACK_DIR_ZENG_1 第一次增量备份目录位置
6. # --incremental-basedir 该选项后面写的为第一次完整备份的路径
7. 注:此次增量备份是在第一次完整备份的基础之上进行的增量备份

4)第二次增量备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --incremental-basedir=BACK_DIR_ZENG_1 --incremental BACK_DIR_ZENG_2
2. # PASSWORD 数据库密码
3. # DATE 数据库名
4. # BACK_DIR_PATH 完全备份目录位置
5. # BACK_DIR_ZENG_1 第一次增量备份目录位置
6. # BACK_DIR_ZENG_2 第二次增量备份目录位置
7. # --incremental-basedir 该选项后面写的为第一次增量备份的路径
8. 注:此次增量备份是在第一次增量备份的基础之上进行的第二次增量备份

5)多次增量备份之后的恢复

1、首先需要备份现有数据库
2、停止数据库运行
3、删除数据库目录内所有文件
4、然后执行下列命令进行恢复
先恢复第一次全备的数据库的应用日志
命令:
innobackupex --defaults-file=/etc/my.cnf --user=root --password='密码' --apply-log --redo-only BACK_DIR_PATH 恢复第一次增量备份的数据库应用日志
innobackupex --defaults-file=/etc/my.cnf --user=root --password='密码' --apply-log --redo-only BACK_DIR_PATH --incremental-dir=BACK_DIR_ZENG_1
恢复第二次增量备份的数据库应用日志
innobackupex --defaults-file=/etc/my.cnf --user=root --password='密码' --apply-log BACK_DIR_PATH --incremental-dir=BACK_DIR_ZENG_2 1. # BACK_DIR_PATH 完全备份目录位置
2. # BACK_DIR_ZENG_1 第一次增量备份目录位置
3. # BACK_DIR_ZENG_2 第二次增量备份目录位置
4. 注: 如果只有2次增量备份则执行此条命令,如果有多次增量命令,则参照上一条命令
5. 最后一次恢复的时候不需要加--redo-only这个参数。

=================================================================================

恢复第三步:
修改文件权限。
cd 到data目录
chown -R mysql.mysql data、
可能出现的报错:
1、出现下面错误,
# ./mysql.server start
Starting MySQL...The server quit without updating PID file (/u01/mysql/data/newbidb.pid).[FAILED]
初始化一下mysql
# ./mysql_install_db --basedir=/你的mysql 目录 --no-defaults --skip-name-resolve --user=mysql --datadir=/你的数据存放目录 2、权限:应该恢复使用的是root用户,但是MySQL需要MySQL用户去访问。
# ./mysql.server restart
MySQL server PID file could not be found![FAILED]
Starting MySQL.The server quit without updating PID file (/u01/mysql/data/newbidb.pid).[FAILED] 3、连接MySQL的时候
#./mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
没有这个文件,touch mysql.sock 并修改文件权限。 恢复备份文件要保证datadir文件为空,否则会报如下的错误
# innobackupex --user=root /data/backup/
IMPORTANT: Please check that the copy-back run completes successfully.
At the end of a successful copy-back run innobackupex
prints "completed OK!".
Original data directory is not empty! at /usr/bin/innobackupex line 568.

=================================================================================

实例脚本:

脚本是每周天整备,周一到周六增倍

自动判断是否存在昨天和今天的数据来进行全备或者增倍

#!/bin/bash
export PATH=$PATH:/usr/local/xtrabackup/bin
HOST=127.0.0.1
DATE=`date +"%Y-%m-%d-%A"`
LASTDATE=`date +"%Y-%m-%d-%A" -d "-1 days"`
DATEDAY=`date +%A`
WEEKDAY='Sunday'
BACKUP_DIR_PATH=/要备份的目录
FILE_CNF=/usr/local/mysql55/conf/配置文件
USER_NAME=用户名
PASSWORD="密码"
MYPORT=端口号
#全备备份函数
cd $BACKUP_DIR_PATH
all_bak () {
echo "start $DATE-all" >> $BACKUP_DIR_PATH/access.log
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --port=MYPORT --host=$HOST --no-timestamp $BACKUP_DIR_PATH/$DATE-all
if [ $? -eq 0 ];then
echo "$DATE-all is succeed" >> $BACKUP_DIR_PATH/access.log
tar -zcvf $BACKUP_DIR_PATH/$DATE-all.tar.gz $DATE-all
if [ $? -eq 0 ];then
echo "$DATE-all is packaging succeed" >> $BACKUP_DIR_PATH/access.log
# rm -rf $DATE-all
else
echo "$DATE-all is packaging failure" >> $BACKUP_DIR_PATH/access.log
fi
else
echo "$DATE-all is failure" >> $BACKUP_DIR_PATH/access.log
fi
echo "stop $DATE-all" >> $BACKUP_DIR_PATH/access.log
}
#增量备份函数
incremental(){
echo "start $DATE-incremental" $BACKUP_DIR_PATH/access.log
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --port=MYPORT --host=$HOST --incremental-basedir=$BACKUP_DIR_PATH/$LASTDATE-$1 --no-timestamp --incremental $BACKUP_DIR_PATH/$DATE-incremental
if [ $? -eq 0 ];then
echo "$DATE-incremental is succeed" >> $BACKUP_DIR_PATH/access.log
tar -zcvf $BACKUP_DIR_PATH/$DATE-incremental.tar.gz $DATE-incremental
if [ $? -eq 0 ];then
echo "$DATE-incremental is packaging succeed" >> $BACKUP_DIR_PATH/access.log
# rm -rf $DATE-incremental
else
echo "$DATE-ncremental is packaging failure" >> $BACKUP_DIR_PATH/access.log
fi
else
echo "$DATE-incremental is failure" >> $BACKUP_DIR_PATH/access.log
fi
echo "stop $DATE-incremental" >> $BACKUP_DIR_PATH/access.log
}
#判断数据库备份存放目录,不存在创建
if [ ! -d $BACKUP_DIR_PATH ];then
mkdir $BACKUP_DIR_PATH
fi
#判断如果今天是周天,那么全备,否则增备
if [ $DATEDAY = $WEEKDAY ];then
if [ ! -d "$BACKUP_DIR_PATH/$DATE-all" ];then
all_bak
fi
else
#判断昨天的数据是否存在
if [ ! -d "$BACKUP_DIR_PATH/$LASTDATE-all" ];then
if [ ! -d "$BACKUP_DIR_PATH/$LASTDATE-incremental" ];then
if [ ! -d "$BACKUP_DIR_PATH/$DATE-all" ];then
if [ ! -d "$BACKUP_DIR_PATH/$DATE-incremental" ];then
all_bak
fi
fi
else
if [ ! -d "$BACKUP_DIR_PATH/$DATE-incremental" ];then
incremental incremental
fi
fi
else
#如果昨天是全备,今天增量不存在,那么进行增量备份
if [ ! -d "$BACKUP_DIR_PATH/$DATE-incremental" ];then
incremental all
fi
fi
fi

percona-xtrabackup备份mysql的更多相关文章

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

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

  2. Percona Xtrabackup备份mysql(转)

    add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...

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

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

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

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

  5. 利用xtrabackup备份mysql数据库

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

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

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

  7. 使用Percona Xtrabackup创建MySQL slave库

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

  8. 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时出现如下报错 ...

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

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

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

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

随机推荐

  1. 『jQuery』.html(),.text()和.val()的概述及使用

    转自http://www.jb51.net/article/35867.htm 如何使用jQuery中的.html(),.text()和.val()三种方法,用于读取,修改元素的html结构,元素的文 ...

  2. 【HDU 1445】Ride to School

    题 题意 骑自行车,等0时开始最早出发的人,一起出发,然后被别人超过时,就追上去,终点距离是4.5km,速度单位是km/s,求到达的时间(s). 分析 贪心,找0时开始最早到的即可. 代码 #incl ...

  3. 【HDU 5578】Friendship of Frog

    题 题意 求相同字母最近距离 分析 用数组保存各个字母最后出现的位置,维护最小距离. 代码 #include <cstdio> int c[30],n,p,a,minl; char ch; ...

  4. WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 http://www.wooyun.org/bugs/wooyun-2010-06 ...

  5. 代码重构-2 简单不变的 if else 用字典代替

    原代码 private string GetExDesc(string lotteryCode) { string exDesc = "抽奖"; if (lotteryCode.T ...

  6. Spring实战学习笔记之SpEL表达式

            在Spring XML配置文件中装配Bean的属性和构造参数都是静态的,而在运行期才知道装配的值,就可以使用SpEL实现         SpEL表达式的首要目标是通过计算获得某个值. ...

  7. 百度或者Google---SEO优化(转载)

    google 和百度的技术差别: 1.百度还认不清哪个是原创的 2.google蜘蛛不够百度快 4.google排名结果随时变化 流量.权重.权威.内容.用户体验.用户关注度等等细节的排名,已表 达了 ...

  8. 如何卸载lnmp

    转自:https://www.centos.bz/2011/07/howto-remove-lnmp/ killall nginx /etc/init.d/mysql stop killall mys ...

  9. git windows中文目录乱码问题解决

    转自:http://blog.chinaunix.net/uid-9789774-id-3080448.html Git的Windows版本Msysgit对中文的支持不够好 当使用时,会出现以下三种情 ...

  10. matlab之矩阵分解

    矩阵分解 矩阵分解 (decomposition, factorization)是将矩阵拆解为数个矩阵的乘积. 1.三角分解法: 要求原矩阵为方阵,将之分解成一个上三角形矩阵(或是排列(permute ...