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. javascript实现的手风琴折叠菜单效果

    演示地址:http://codepen.io/anon/pen/pJERMq 实现效果: HTML代码: <!DOCTYPE html> <html lang="en&qu ...

  2. 如何判断Linux load的值是否过高

    1.先使用top看下CPU占用高的进程,找出进程的进程ID(pid): 查看方法:top 2.根据进程ID(pid)查看是进程的那些线程占用CPU高. 查看方法:top -Hp pid 3.使用pst ...

  3. oracle学习笔记(一)用户管理

    --oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...

  4. Android编程心得-JSON使用心得(二)

    在Android开发中,我们经常会用到JSON来与网络数据进行交互,下面我来介绍如何对JSON数据进行解析与制造 1.当我们需要对如下JSON串进行制造时: { "download" ...

  5. 微信分享jssdk config:invalid signature 签名错误

    使用微信分享时,按照官方给的demo,使用时一直提示签名错误. 根据微信开发文档(http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd ...

  6. 在JasperReport中填充JavaBean(4)

    使用Parameters参数对象传递字符串的示例,本节将演示打印List接口中Userinfo.java实体类的示例,打印的数据源不是来自于Parameters对象,而是JRBeanCollectio ...

  7. VS2010中<无法打开包括文件:“iostream.h”:>错误解决方法

    C/C++ code? 1 2 #include <iostream.h> 改为: C/C++ code? 1 2 #include <iostream> using name ...

  8. FATAL:NO bootable medium found!System halted.

    问题描述:致命错误,没有可引导的媒体.系统挂起.以下是在网上查的: 1:检查硬盘的类型,ide或sata接口是否在0,0或是在1,0. 2:光驱是否选择iso文件. 3:iso文件是否损坏4:virt ...

  9. Android处理XML的三种方式

    http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html http://blog.csdn.net/zzp16/articl ...

  10. Vim 默认开启行号、语法显示等设置

      在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc. 在启动vim时,当前 ...