1. 先说下实际环境
  2. 阿里云买的ESC跑的mysql服务,目前由于数据量过大,数据库目前有800多GB,每次全备需要等20多个小时才能够完成,然后就想到做增量备份,写下此文档

一、测试环境

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.2(Final)
[root@localhost ~]# mysql --version
mysql Ver14.14Distrib5.5.20,forLinux(x86_64)using readline 5.1

二、安装软件及其作用

  软件名:percona-xtrabackup

  作用:针对Mysql数据库进行热备份,及增量备份,主要应用于innodb引擎

三、安装步骤

yum -y install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel #安装依赖包
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm #安装percona YUM库
yum -y install percona-xtrabackup.x86_64 #安装percona-xtrabackup

四、备份及恢复命令

1)完整备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE BACK_DIR_PATH
# PASSWORD 数据库密码
# DATE 数据库名
# --database=DATE 针对所有库做备份去掉该选项即可
# BACK_DIR_PATH 完全备份目录位置
注:该命令执行后会在备份目录位置以当前时间为命名生成一个目录,备份的文件会备份到该目录中。例如2014--06_16--
2)完整备份的恢复
.首先需要备份数据库
.停止数据库运行
.删除数据库目录内所有文件
.然后执行下列命令进行恢复
innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --apply-log BACK_DIR_PATH/--06_16--
# PASSWORD 数据库密码
# DATE 数据库名
# BACK_DIR_PATH 完全备份目录位置
3)增量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --incremental-basedir=BACK_DIR_PATH/--06_16----incremental BACK_DIR_ZENG_1
# PASSWORD 数据库密码
# DATE 数据库名
# BACK_DIR_PATH 完全备份目录位置
# BACK_DIR_ZENG_1 第一次增量备份目录位置
# --incremental-basedir 该选项后面写的为第一次完整备份的路径
注:此次增量备份是在第一次完整备份的基础之上进行的增量备份
4)第二次增量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --incremental-basedir=BACK_DIR_ZENG_1 --incremental BACK_DIR_ZENG_2
# PASSWORD 数据库密码
# DATE 数据库名
# BACK_DIR_PATH 完全备份目录位置
# BACK_DIR_ZENG_1 第一次增量备份目录位置
# BACK_DIR_ZENG_2 第二次增量备份目录位置
# --incremental-basedir 该选项后面写的为第一次增量备份的路径
注:此次增量备份是在第一次增量备份的基础之上进行的第二次增量备份
5)第三次增量备份

  同第二次增量备份

6)多次增量备份之后的恢复
、首先需要备份数据库
、停止数据库运行
、删除数据库目录内所有文件
、然后执行下列命令进行恢复
innobackupex --apply-log --redo-only BACK_DIR_PATH
innobackupex --apply-log --redo-only BACK_DIR_PATH --incremental-dir=BACK_DIR_ZENG_1
innobackupex --apply-log BACK_DIR_PATH --incremental-dir=BACK_DIR_ZENG_2
# BACK_DIR_PATH 完全备份目录位置
# BACK_DIR_ZENG_1 第一次增量备份目录位置
# BACK_DIR_ZENG_2 第二次增量备份目录位置
注:如果只有2次增量备份则执行此条命令,如果有多次增量命令,则参照上一条命令

五、脚本

 此脚本为一次全备+6次增备轮询
#!/bin/sh
DATE=`date +%Y-%m-%d`
BACKUP_DIR_PATH=/backup/data
FILE_CNF=/etc/my.cnf
USER_NAME=root
PASSWORD=root
DATEBASE=test
BACK_LOG=$BACKUP_DIR_PATH/backup_cost_time
OUT_LOG=Xtrabackup_$DATE.log
if[-d "$BACKUP_DIR_PATH/rec6"];
then
mv $BACKUP_DIR_PATH $BACKUP_DIR_PATH-bak
mkdir $BACKUP_DIR_PATH
fi
if[!-d "$BACKUP_DIR_PATH/full"];
then
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/full
echo "###start full backup at $START_DATE to directory full">> $BACK_LOG
echo "###start full backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE $BACKUP_DIR_PATH/full >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop full backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop full backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
elif[!-d "$BACKUP_DIR_PATH/rec1"];
then
BACKUP_FULL_PATH=`ls -l $BACKUP_DIR_PATH/full |awk '/^d/ {print $NF}'`
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/rec1
echo "###start 1 incremental backup at $START_DATE to directory full">> $BACK_LOG
echo "###start 1 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/full/$BACKUP_FULL_PATH --incremental $BACKUP_DIR_PATH/rec1 >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop 1 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop 1 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
elif[!-d "$BACKUP_DIR_PATH/rec2"];
then
BACKUP_REC1_PATH=`ls -l $BACKUP_DIR_PATH/rec1 |awk '/^d/ {print $NF}'`
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/rec2
echo "###start 2 incremental backup at $START_DATE to directory full">> $BACK_LOG
echo "###start 2 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec1/$BACKUP_REC1_PATH --incremental $BACKUP_DIR_PATH/rec2 >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop 2 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop 2 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
elif[!-d "$BACKUP_DIR_PATH/rec3"];
then
BACKUP_REC2_PATH=`ls -l $BACKUP_DIR_PATH/rec2 |awk '/^d/ {print $NF}'`
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/rec3
echo "###start 3 incremental backup at $START_DATE to directory full">> $BACK_LOG
echo "###start 3 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec2/$BACKUP_REC2_PATH --incremental $BACKUP_DIR_PATH/rec3 >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop 3 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop 3 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
elif[!-d "$BACKUP_DIR_PATH/rec4"];
then
BACKUP_REC3_PATH=`ls -l $BACKUP_DIR_PATH/rec3 |awk '/^d/ {print $NF}'`
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/rec4
echo "###start 4 incremental backup at $START_DATE to directory full">> $BACK_LOG
echo "###start 4 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec3/$BACKUP_REC3_PATH --incremental $BACKUP_DIR_PATH/rec4 >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop 4 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop 4 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
elif[!-d "$BACKUP_DIR_PATH/rec5"];
then
BACKUP_REC4_PATH=`ls -l $BACKUP_DIR_PATH/rec4 |awk '/^d/ {print $NF}'`
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/rec5
echo "###start 5 incremental backup at $START_DATE to directory full">> $BACK_LOG
echo "###start 5 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec4/$BACKUP_REC4_PATH --incremental $BACKUP_DIR_PATH/rec5 >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop 5 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop 5 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
elif[!-d "$BACKUP_DIR_PATH/rec6"];
then
BACKUP_REC5_PATH=`ls -l $BACKUP_DIR_PATH/rec5 |awk '/^d/ {print $NF}'`
START_DATE=`date +%Y-%m-%d_%H:%M:%S`
mkdir $BACKUP_DIR_PATH/rec6
echo "###start 6 incremental backup at $START_DATE to directory full">> $BACK_LOG
echo "###start 6 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec5/$BACKUP_REC5_PATH --incremental $BACKUP_DIR_PATH/rec6 >>$BACKUP_DIR_PATH/$OUT_LOG
STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
echo "###stop 6 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
echo "###stop 6 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACK_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
echo "">> $BACKUP_DIR_PATH/$OUT_LOG
break;
fi

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

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

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

  2. innobackupex做MySQL增量备份及恢复【转】

    创建备份用户 mysql> grant process,reload,lock tables,replication client on *.* to 'backup'@'localhost' ...

  3. MySQL数据库备份之xtrabackup工具使用

    一.Xtrabackup备份介绍及原理 二.Xtrabackup的安装 1.在centos7上基于yum源安装percona-xtrabackup软件 [root@node7 ~]# yum -y i ...

  4. MySQL 物理备份工具-xtrabackup

    安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install perl ...

  5. MySQL自动备份实战--xtrabackup备份

    MySQL数据备份企业实战.制作shell脚本 功能1:使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup).提示: 周一某个时间点做一次完全备 ...

  6. mysql数据备份之 xtrabackup

    上一篇简单介绍了一下mysqldump进行数据库的备份和恢复,这一篇说一下另一种备份工具xtrabackup,在InnoDB事务引擎泛滥的时代,xtrabackup可以很好的支持数据库的热备份,这就很 ...

  7. mysql数据库备份工具xtrabackup

    1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介:  Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...

  8. MYSQL数据库自动本地/异地双备份/MYSQL增量备份

    构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构.针对安全性有多种多样的解决方案,其中数据备份是 ...

  9. windows下mysql增量备份与全备份批处理

    win下的全备批处理 批处理用于游戏服务器,经过严格测试,且正式使用,主要用来完全备份数据库,当然.这只是将数备份出来 ,至于如何将备份出来的数据远程传送的远程服务器上可以调用ftp的功能,此脚本并未 ...

随机推荐

  1. jQuery 之$.proxy() 方法

    定义和用法 $.proxy 方法接受一个已有的函数,并返回一个带特定上下文的新的函数. 该方法通常用于向上下文指向不同对象的元素添加事件. 参数 描述 function 要被调用的已有的函数. con ...

  2. Codeforces Round #143 (Div. 2) (ABCD 思维场)

    题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test: ...

  3. [Cycle.js] The Cycle.js principle: separating logic from effects

    The guiding principle in Cycle.js is we want to separate logic from effects. This first part here wa ...

  4. linux高级技巧:heartbeat+lvs(一)

    1.heartbeat一个简短的引论:        Heartbeat 项目是 Linux-HA project的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组 ...

  5. .net 2.0中半角全角错误的解决办法

    VS2005中.net 2.0编译报错如下所示:'System.Windows.Forms.ImeMode' does not contain a definition for 'OnHalf'.只需 ...

  6. UI基础视图----UIScrollView总结

    UIScrollView是UIKit框架下的很重要的视图类,是UIView的子类.UILabel,UIImageView,UIWebView分别用于展示文字,图片,网页,UILabel通过属性text ...

  7. 范围for语句 && 列表初始值&& 标准库函数begin和end

    范围for语句: 引入的意义:简化传统for的编写,主要用于遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是: for( 声明: 给定序列) { 执行的操作. } 其中,“给定序列 ...

  8. volatile举列说明const

    1.即使本程序中虽然不改变这种类型的值,但别的比如中断程序可能会改变这个值,加上volatile,编译器不优化,每次都重新访问这个值做判断 2.如 unsigned char flag = 1; in ...

  9. birt报表图标中文显示为框框的解决方法

    birt报表中图标部分的中文显示为框框,其他部分中文显示正常 解决办法:修改jdk中的字体设置/jdk1.6.0_13/jre/lib /fonts/fonts.dir 1.将宋体字体copy到/jd ...

  10. lunix安装jdk(rpm格式)

    1.下载后,首先把jdk-7u3-linux-x64.rpm复制到/usr/local/src#cp jdk-7u3-linux-x64.rpm /usr/local/src/2.给所有用户添加可执行 ...