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. Bringing up interface eth0: Error:Connection activation failed:Device not managed by NetworkManager

    Just follow the below steps and everything will be ok...   1. Remove Network Manager from startup Se ...

  2. POJ1125 Stockbroker Grapevine

    Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a me ...

  3. 洛谷P1174 打砖块

    题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...

  4. javaIO(三)

  5. Longest Increasing Common Subsequence (LICS)

    最长上升公共子序列(Longest Increasing Common Subsequence,LICS)也是经典DP问题,是LCS与LIS的混合. Problem 求数列 a[1..n], b[1. ...

  6. iOS应用开发最佳实践系列一:编写高质量的Objective-C代码

          本文由海水的味道编译整理,转载请注明译者和出处,请勿用于商业用途! 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法. 良好的 ...

  7. 第一部分 mongodb 基础篇

    什么是NoSQL认识MongoDBMongDB的下载与安装MongoDB的体系结构常用命令(基本的增删改查)客户端GUI工具集合 一: 什么是NoSql1 NoSQL简介NoSQL是Not Only ...

  8. java中request,application,session三个域及参数简单示例

    直接上代码: java代码: public class HelloAction implements Action { @Override public String execute() throws ...

  9. sencha touch list(列表)、 store(数据源)、model(模型)详解

    //求职 Ext.define('app.model.Staff', { extend: 'Ext.data.Model', config: { fields: [{ name: 'id', type ...

  10. C++小思

    Bjarne那稀疏的棕褐色头发, 有点红的眼睛, 这个可爱的好老头, 感觉他更应该是一个哲学家, 因为他用编程的语言C++ 揭示了我们这个纷繁复杂世界的本质: 对象. 对的, 世界是由对象组成的, 并 ...