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的功能,此脚本并未 ...
随机推荐
- iPhone应用提交流程:如何将App程序发布到App Store?
对于刚加入iOS应用开发行列的开发者来说,终于经过艰苦的Coding后完成了第一个应用后最重要的历史时刻就是将应用程序提交到iTunes App Store.Xcode 4.2开发工具已经把App提交 ...
- 什么是 gnuplot
Gnuplot是一个命令行的交互式绘图工具(command-driven interactive function plotting program).用户通过输入命令,可以逐步设置或修改绘图环境,并 ...
- 编译U-boot时,make[1]: *** 没有规则可以创建mkimage.o”
执行完make smdk2440_config 对Uboot重行编译怎么会出现这样的错误 make[1]: Entering directory `/home/win/S3-ARM/Part4/ubo ...
- web开发常用样式
1.div保持底部浮动(不受滚动条影响) position:fixed;_position:absolute;bottom:0px;_bottom:0px;_margin-top:expression ...
- C/C++中的switch使用
代码: #include <iostream> #include <string> #include <cstdio> using namespace std; i ...
- jquery dataTable 入门
step1:切记要先引入jquery <link rel="stylesheet" type="text/css" href="C:\Users ...
- UVa 232 Crossword Answers
Crossword Answers A crossword puzzle consists of a rectangular grid of black and white squares and ...
- Codeforces Round #276 (Div. 2) 解题报告
题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...
- 开心菜鸟学习系列学习笔记------------nodejs util公共函数
global 在最外层定义的变量: 全局对象的属性: 隐式定义的变量(未定义直接赋值的变量). 一.process process 是一个全局变量,即 global 对象的属性 ...
- MySql增加字段、删除字段、修改字段
MySql增加字段.删除字段.修改字段名称.修改字段类型 1.增加一个字段 alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; / ...