使用perconna xtrabackup备份脚本
使用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备份脚本的更多相关文章
- MySQL XtraBackup备份脚本
#backup.sh #!/bin/sh #on xtrabackup 2.1.8 # 第一次执行它的时候它会检查是否有完全备份,否则先创建一个全库备份 # 当你再次运行它的时候,它会根据脚本中的设 ...
- xtrabackup备份脚本
背景:现网环境全备份脚本:基于xtrabackup命令 #!/bin/sh # MySQL端口 PORT=' # 备份用户 USER='bkpuser' PAWD='bkpuser' Time=`da ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- Xtrabackup每周增量备份脚本程序
Xtrabackup每周增量备份脚本程序(含附件) 程序描述 本程序是一个对percona xtrabackup使用的脚本,它完成了MySQL每周的备份. 程序结构 此程序包含了4个目录(bin. ...
- xtrabackup备份和恢复数据脚本
该脚本用于备份和恢复MySQL数据库. 总结xtrabackup备份的两个坑: 1.在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复. 2.在恢复过程中,如果版本过低,在准备全量数据 ...
- Percona XtraBackup 备份原理说明【转】
本文来自:http://mysql.taobao.org/monthly/2016/03/07/ 前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MyS ...
- XtraBackup备份笔记
安装 rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm yum in ...
- Python 生产环境MySQL数据库增量备份脚本
MySQL数据库常用的办法是通过MySQLdump导出sql进行备份,但是不适合数据量很大的数据库,速度,锁表是两个严重的问题.前面写了一遍文章介绍xtrabackup的热备工具,见 http://w ...
- Percona Xtrabackup备份mysql(转)
add by zhj:另外,参考了Xtrabackup之innobackupex备份恢复详解,我用的是Xtrabackup2.2.6版本, 可以成功备份和恢复指定的数据库. 原文:http://www ...
随机推荐
- Missing artifact com.oracle:ojdbc6:jar:11.2.0.3 Maven中不能引入ojdbc解决方法,错误
今天从服务器检出Maven项目的时候,遇到了一个问题,就是在pom.xml中引入ojdbc的jar包的时候出错了,提示是Missing artifact com.oracle:ojdbc6:jar:1 ...
- Clover file list
/Volumes/EFI//EFI: total 4 drwxrwxrwx 1 jianweiliu staff 512 Apr 20 12:17 APPLE drwxrwxrwx@ 1 jianwe ...
- codeforces589I
Lottery CodeForces - 589I Today Berland holds a lottery with a prize — a huge sum of money! There ar ...
- hdu-5687(字典树)
题意:中文题: 解题思路:增加和查询就不说了,标准操作,就是删除操作:删除操作的时候,我们把给定字符串先在字典树中遍历一遍,然后算出这个字符串最后一个字符的出现次数,然后在遍历一遍,每个节点都减去这个 ...
- winserver 2008 R2服务器安装IIS
winserver 2008 R2 IIS7 安装IIS 打开服务器管理器 选择“角色”,右击添加角色 点击“下一步” 勾选”Web服务器(IIS)“,点击”下一步“ 勾选”常见Http功能.应用程序 ...
- 第四十天 并发编程之io模型
一.今日内容 1.网络IO的两个阶段 waitdata copydata 2阻塞IO模型 之前写的都是阻塞 无论多线程 多进程 还是 进程池 线程池 3.非阻塞IO模型 在非阻塞IO中 需要不断循环询 ...
- 【XSY2771】城市 分治
题目描述 一个平原上有\(n\)个城市,第\(i\)个城市在点\((\cos \frac{2i\pi}{n},\sin \frac{2i\pi}{n})\)上. 每个城市和最近的两个城市有一条直线段的 ...
- BSGS&扩展BSGS
BSGS 给定\(a,b,p\),求\(x\)使得\(a^x\equiv b \pmod p\),或者说明不存在\(x\) 只能求\(\gcd(a,p)=1\)的情况 有一个结论:如果有解则必然存在\ ...
- LOJ #2234. 「JLOI2014」聪明的燕姿(搜索 + 数论)
题意 给出一个数 \(S\) ,输出所有约数和等于 \(S\) 的数. \(S \le 2 \times 10^9\) ,数据组数 \(\le 100\) . 题解 首先用约数和定理: \[ \beg ...
- 定位现网环境中最耗费CPU的Java线程
参考:JVM性能调优监控工具jps.jstack.jmap.jhat.jstat.hprof使用详解 下面通过一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps. ...