mysql增量备份 percona-xtrabackup
先说下实际环境阿里云买的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的更多相关文章
- MySQL · 物理备份 · Percona XtraBackup 备份原理
http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据 ...
- innobackupex做MySQL增量备份及恢复【转】
创建备份用户 mysql> grant process,reload,lock tables,replication client on *.* to 'backup'@'localhost' ...
- MySQL数据库备份之xtrabackup工具使用
一.Xtrabackup备份介绍及原理 二.Xtrabackup的安装 1.在centos7上基于yum源安装percona-xtrabackup软件 [root@node7 ~]# yum -y i ...
- MySQL 物理备份工具-xtrabackup
安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install perl ...
- MySQL自动备份实战--xtrabackup备份
MySQL数据备份企业实战.制作shell脚本 功能1:使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup).提示: 周一某个时间点做一次完全备 ...
- mysql数据备份之 xtrabackup
上一篇简单介绍了一下mysqldump进行数据库的备份和恢复,这一篇说一下另一种备份工具xtrabackup,在InnoDB事务引擎泛滥的时代,xtrabackup可以很好的支持数据库的热备份,这就很 ...
- mysql数据库备份工具xtrabackup
1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...
- MYSQL数据库自动本地/异地双备份/MYSQL增量备份
构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构.针对安全性有多种多样的解决方案,其中数据备份是 ...
- windows下mysql增量备份与全备份批处理
win下的全备批处理 批处理用于游戏服务器,经过严格测试,且正式使用,主要用来完全备份数据库,当然.这只是将数备份出来 ,至于如何将备份出来的数据远程传送的远程服务器上可以调用ftp的功能,此脚本并未 ...
随机推荐
- Web Service工作原理
Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...
- 关于ionic传值
今天,也是偶然发现有的初学者对ionic的传值还不太清除,这里我说明一下 例如你想在这个页面传递参数a.b过去,传递到"tab.wait"页面 $state.go("ta ...
- Pojo和JavaBean的区别(转载)
OJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象. 2005年11月时,“POJO”主要用来指代那些没用遵从特定的Java对象模型,约 ...
- [转]myeclipse 生成JAR包并引入第三方包
myeclipse 生成JAR包并引入第三方包 我用的是myeclipse8.0 首先用myeclipse生成JAR 一.生成JAR包 1.点选项目右键—>Export 2.Java—>J ...
- [置顶] IOS7状态栏StatusBar官方标准适配方法
IOS7状态栏StatusBar官方标准适配方法 hello,大家好,ios7正式版已经发布,相信大家都在以各种方式来适配ios7. 如果你已经下载了xcode5,正准备使用,你会发现各种布局的改变. ...
- ashx调用session对象
1.引入命名空间 using System.Web.SessionState 2.必须实现接口 public class Login : IHttpHandler, IRequiresSessionS ...
- (转)怎样查看局域网中自己的IP地址和其他电脑的IP地址?
开始菜单->运行->打cmd,回车->再弹出的黑框里打ipconfig -all,回车显示的IP Address就是你的ip地址看局域网的电脑的ip用软件比较方便,比如p2p终结者, ...
- iOS RGB颜色封装
使用类别创建 .h文件 #import <UIKit/UIKit.h> @interface UIColor (HexColor) + (UIColor *)colorWithHex:(N ...
- Java Load Properties 文件,定义message信息
初始化Properties对象,load properties文件: private static final Properties MESSAGERESOURCES = new Properties ...
- linux系统结构和系统命令初步
以上是第五课和第14课笔记 linux 基本结构: 系统构成:kernel,Modules,Lib,(Shell,Tool)系统引导:BIOS -> Bootlooder -> Kerne ...