使用percona xtrabackup对两个数据库实例进行备份,备份的脚本如下所示:

 #!/bin/bash
BASEDIR="/usr/local/mysql"
BIN="$BASEDIR/bin"
MYDUMPE="/usr/local/bin/mydumper"
XTRABACKUP="/usr/bin/xtrabackup"
DATA1_HOME="$BASEDIR/mysqldata/data1"
DATA1_MYCNF="$DATA1_HOME/my.cnf"
DATA1_SOCK=`grep socket $DATA1_MYCNF|awk '{print $3}'`
DATA1_PORT=`grep port $DATA1_MYCNF|awk '{print $3}'`
DATA1_IP=`grep bind-address $DATA1_MYCNF|awk '{print $3}'` DATA2_HOME="$BASEDIR/mysqldata/data2"
DATA2_MYCNF="$DATA2_HOME/my.cnf"
DATA2_SOCK=`grep socket $DATA2_MYCNF|awk '{print $3}'`
DATA2_PORT=`grep port $DATA2_MYCNF|awk '{print $3}'`
DATA2_IP=`grep bind-address $DATA2_MYCNF|awk '{print $3}'` USER="root"
PASSWORD=""
BACKUPPATH_LOCAL="/usr/local/mysql/mysqldata/databak"
BACKUPPATH_REMOTE="/usr/local/mysql/databak"
#get the first day of one week,all backup directory is named by date,the incremental-basedir is the first day of the week
DATE="`date +%F`"
# get the day number of today in this week,monday is ,sunday is as the first day of this week
WEEKDAY="`date +%u`"
AGO="$WEEKDAY days ago"
WEEKNUM=`date +%U`
#get the first day of one week,as the incremental_back_base
WEEK_FIRST_DAY=`date -d "$AGO" +%F`
TODAY_DIR="$BACKUPPATH_LOCAL/today" # the full backup function
full_backup(){
local DEFAULTS_FILE=$
local USER=$
local PASSWORD=$
local SOCKET=$
local TARGET_DIR=$
local LOG_FILE=$
$BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "stop slave;"
$XTRABACKUP --defaults-file=$DEFAULTS_FILE --backup --user=$USER --password=$PASSWORD --socket=$SOCKET --target-dir=$TARGET_DIR >$LOG_FILE >&
$BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "start slave;" }
# the incremental backup function
incremental_backup(){
local DEFAULTS_FILE=$
local USER=$
local PASSWORD=$
local SOCKET=$
local TARGET_DIR=$
local LOG_FILE=$
local BASE_DIR=$
local NAME=$
$BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "stop slave;"
$XTRABACKUP --defaults-file=$DEFAULTS_FILE --backup --user=$USER --password=$PASSWORD --socket=$SOCKET --incremental-basedir=$BASE_DIR --target-dir=$TARGET_DIR >$LOG_FILE >&
#$XTRABACKUP --defaults-file=$DEFAULTS_FILE --backup --user=$USER --password=$PASSWORD --socket=$SOCKET --compression --stream=xbstream --incremental-basedir=$BASE_DIR --target-dir=$TARGET_DIR >$DATE-$NAME.tar
$BIN/mysql --user=$USER --password=$PASSWORD -S $SOCKET -e "start slave;"
}
# check the mysql is running or not,if mysql is not running ,the backup will cancel
mysql_check(){
local SOCKET=$
local IP=$
local PORT=$
local NAME=$
if [ `ps -ef|grep $SOCKET|grep -Ev grep|wc -l` -ge ] && [ `netstat -ltnp|grep $IP:$PORT|grep -Ev grep|wc -l` -eq ]
then
echo " THE MYSQL SERVER $NAME IS RUNNING"
return
else
echo "THE MYSQL SERVER $NAME IS NOT RUNNING"
return
fi
} # main
# delete yesterday backup in TODAY directory
/bin/mv $TODAY_DIR/* $BACKUPPATH_LOCAL [ -e $TODAY_DIR ] || mkdir -p $TODAY_DIR
[ -e "$BACKUPPATH_LOCAL/$DATE" ] || mkdir -p "$BACKUPPATH_LOCAL/$DATE"
cd "$BACKUPPATH_LOCAL/$DATE" TARGET_DIR="$BACKUPPATH_LOCAL/$DATE" # if today is sunday,the backup type is full_backup,else the backup type is delta backup on the sunday full backup
if [ $WEEKDAY -eq 7 ]
then
mysql_check $DATA1_SOCK $DATA1_IP $DATA1_PORT "DATA1"
[ $? -eq 1 ] && full_backup $DATA1_MYCNF $USER $PASSWORD $DATA1_SOCK $TARGET_DIR/data1 "$TARGET_DIR/data1.log"
mysql_check $DATA2_SOCK $DATA2_IP $DATA2_PORT "DATA2"
#echo $TARGET_DIR
[ $? -eq 1 ] && full_backup $DATA2_MYCNF $USER $PASSWORD $DATA2_SOCK $TARGET_DIR/data2 "$TARGET_DIR/data2.log"
else
BASE_DIR=$BACKUPPATH_LOCAL/$WEEK_FIRST_DAY
mysql_check $DATA1_SOCK $DATA1_IP $DATA1_PORT "DATA1"
[ $? -eq 1 ] && incremental_backup $DATA1_MYCNF $USER $PASSWORD $DATA1_SOCK $TARGET_DIR/data1 $TARGET_DIR/data1.log $BASE_DIR/data1 data1
mysql_check $DATA2_SOCK $DATA2_IP $DATA2_PORT "DATA2"
[ $? -eq 1 ] && incremental_backup $DATA2_MYCNF $USER $PASSWORD $DATA2_SOCK $TARGET_DIR/data2 $TARGET_DIR/data2.log $BASE_DIR/data2 data2
fi
# copy today backup to TODAY directory,the NBU server will catch TODAY directory
#/bin/mv -ar $TARGET_DIR $TODAY_DIR /bin/mv $TARGET_DIR $TODAY_DIR

  主要实现的功能是,每周日早上进行一次全备份操作,然后周内的每天,基于周日的全备,做一个增量备份的操作,每个实例备份的结果,放在以实例命名的目录下,每天忙备份的结果,放在以当前日期命名的目录下。

  备份脚本对应的删除脚本,实现的功能是这样的,每周日,也就是全备的时候,去删除上上周的所有备份,保留上周的所有备份,这个时候要判断上上周的日期,并且找到所有这些目录,实现的脚本如下:

  

 # delete the backup ,delete  days ago full backup and the incremental backup based on that full backup

 BACKUPPATH=/usr/local/mysql/mysqldata/databak
DATE=`date +%F` DELETE_DATE_SUNDAY=`date -d "14 days ago" +%F`
for index in {-,-,-,-,-,-}
do
DELETE_DATE_WEEKDAY=`date -d "$index days ago $DELETE_DATE_SUNDAY" +%F`
DELETE_DATE_DIR=$BACKUPPATH/$DELETE_DATE_WEEKDAY
[ -e $DELETE_DATE_DIR ] && rm -rf $DELETE_DATE_DIR
done [ -e $BACKUPPATH/$DELETE_DATE_SUNDAY ] && rm -rf $BACKUPPATH/$DELETE_DATE_SUNDAY

  在做主从备份的同时,需要对主服务器上面的binlog进行实时同步到从服务器上,因为主服务器上的binlog会被覆盖掉,所以需要在备份的从服务器上保留完整的binlog信息。具体的操作命令是

/usr/local/mysql/bin/mysqlbinlog --raw --read-from-remote-server --stop-never --host=*.*.*.* --port=**** --user=replication --password=**** mysql-bin. --result-file=/usr/local/mysql/mysqldata/master_binlog_bak/data1/back- &

  这行命令的主要功能是从远方的服务器上同步binlog,-raw是指binlog 的格式,stop-never是指不中断的去同步,host和port、user和passeord是有replication权限的用户,后面要跟一个binlog 名称,也就是master主机上的binlog.index中存在的binlog文件名,result-file是要写一个目录名,如果除了目录名,还有其他的字段,那就是定义了目标文件的命名规则。比如/usr/local/mysql/mysqldata/databak/back-,则文件名称为back-mysql-bin.0000*.

使用perconna xtrabackup备份脚本的更多相关文章

  1. MySQL XtraBackup备份脚本

     #backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...

  2. xtrabackup备份脚本

    背景:现网环境全备份脚本:基于xtrabackup命令 #!/bin/sh # MySQL端口 PORT=' # 备份用户 USER='bkpuser' PAWD='bkpuser' Time=`da ...

  3. centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课

    centos   shell编程6一些工作中实践脚本   nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志  直接送给bc做计算  gzip  innobacku ...

  4. Xtrabackup每周增量备份脚本程序

    Xtrabackup每周增量备份脚本程序(含附件)   程序描述 本程序是一个对percona xtrabackup使用的脚本,它完成了MySQL每周的备份. 程序结构 此程序包含了4个目录(bin. ...

  5. xtrabackup备份和恢复数据脚本

    该脚本用于备份和恢复MySQL数据库. 总结xtrabackup备份的两个坑: 1.在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复. 2.在恢复过程中,如果版本过低,在准备全量数据 ...

  6. Percona XtraBackup 备份原理说明【转】

    本文来自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MyS ...

  7. XtraBackup备份笔记

    安装 rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm yum in ...

  8. Python 生产环境MySQL数据库增量备份脚本

    MySQL数据库常用的办法是通过MySQLdump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题.前面写了一遍文章介绍xtrabackup的热备工具,见 http://w ...

  9. Percona Xtrabackup备份mysql(转)

    add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...

随机推荐

  1. Missing artifact com.oracle:ojdbc6:jar:11.2.0.3 Maven中不能引入ojdbc解决方法,错误

    今天从服务器检出Maven项目的时候,遇到了一个问题,就是在pom.xml中引入ojdbc的jar包的时候出错了,提示是Missing artifact com.oracle:ojdbc6:jar:1 ...

  2. Clover file list

    /Volumes/EFI//EFI: total 4 drwxrwxrwx 1 jianweiliu staff 512 Apr 20 12:17 APPLE drwxrwxrwx@ 1 jianwe ...

  3. codeforces589I

    Lottery CodeForces - 589I Today Berland holds a lottery with a prize — a huge sum of money! There ar ...

  4. hdu-5687(字典树)

    题意:中文题: 解题思路:增加和查询就不说了,标准操作,就是删除操作:删除操作的时候,我们把给定字符串先在字典树中遍历一遍,然后算出这个字符串最后一个字符的出现次数,然后在遍历一遍,每个节点都减去这个 ...

  5. winserver 2008 R2服务器安装IIS

    winserver 2008 R2 IIS7 安装IIS 打开服务器管理器 选择“角色”,右击添加角色 点击“下一步” 勾选”Web服务器(IIS)“,点击”下一步“ 勾选”常见Http功能.应用程序 ...

  6. 第四十天 并发编程之io模型

    一.今日内容 1.网络IO的两个阶段 waitdata copydata 2阻塞IO模型 之前写的都是阻塞 无论多线程 多进程 还是 进程池 线程池 3.非阻塞IO模型 在非阻塞IO中 需要不断循环询 ...

  7. 【XSY2771】城市 分治

    题目描述 一个平原上有\(n\)个城市,第\(i\)个城市在点\((\cos \frac{2i\pi}{n},\sin \frac{2i\pi}{n})\)上. 每个城市和最近的两个城市有一条直线段的 ...

  8. BSGS&扩展BSGS

    BSGS 给定\(a,b,p\),求\(x\)使得\(a^x\equiv b \pmod p\),或者说明不存在\(x\) 只能求\(\gcd(a,p)=1\)的情况 有一个结论:如果有解则必然存在\ ...

  9. LOJ #2234. 「JLOI2014」聪明的燕姿(搜索 + 数论)

    题意 给出一个数 \(S\) ,输出所有约数和等于 \(S\) 的数. \(S \le 2 \times 10^9\) ,数据组数 \(\le 100\) . 题解 首先用约数和定理: \[ \beg ...

  10. 定位现网环境中最耗费CPU的Java线程

    参考:JVM性能调优监控工具jps.jstack.jmap.jhat.jstat.hprof使用详解 下面通过一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps. ...