mysql备份脚本
来源:互联网 发布:java实现图片上传预览 编辑:程序博客网 时间:2024/06/10 18:38
这个脚本调用的是innobackupex备份mysql,可以自己设置全备的保留策略,保留策略内的全备和增量备份都放在同一个目录TAGXXXX下,分别为full_XXX和inc_XXX目录,自定义retention变量,超过retention的备份将新建一个TAGXXXX目录,此脚本相比网上的流传的那个更方便,通过简单的修改还能实现基于秒基本的增量复制~~
#!/bin/bash#set -x# Usage will be helpful when you need to input the valid arguments.function usage(){cat <<EOFUsage: $0 [configure-options] -?, --help Show this help message. --backup-dir=<> Set backup directory --defaults-file=[] Set mysql configuration file directory --host=<> Set mysql host --port=<> Set mysql port --user=<> Set mysql user name --password=<> Set mysql user passwordEOF}# Get the key value of input arguments format like '--args=value'.function get_key_value(){ echo "$1" | sed 's/^--[a-zA-Z_-]*=//'} # Parse the input arguments and get the value of the input argument. function parse_options(){ while test $# -gt 0 do case "$1" in --backup-dir=*) backupDir=`get_key_value "$1"`;; --defaults-file=*) defaultFile=`get_key_value "$1"`;; --host=*) Host=`get_key_value "$1"`;; --port=*) mysqlPort=`get_key_value "$1"`;; --user=*) mysqlUser=`get_key_value "$1"`;; --password=*) mysqlPassword=`get_key_value "$1"`;; -? | --help ) usage exit 0;; *) echo "Unknown option '$1'" exit 1;; esac shift done} #mainif [ $# -eq 0 ];then usage exit 0;fi# Call the parse_options function to parse the input arguments and initialisze env.parse_options "$@"#week dayTIMESTAMP=`date +%Y%m%d%H%M%S`TIMEDAY=`date +%Y%m%d`TIMEFULL=`date +%s`#directory structerBACK_HOME=${backupDir}/backupLOGDIR=${BACK_HOME}/logTAGDIR=${BACK_HOME}/TAG${TIMEDAY}CMD=/usr/local/percona-xtrabackup-2.3.2-Linux-x86_64/bin/innobackupexLOGFILE=${LOGDIR}/backup_${TIMESTAMP}.logCURRENTFILE=${BACK_HOME}/currentfileRETENTION=3if [ ! -d "$BACK_HOME" ]; then mkdir -p $BACK_HOMEfi if [ ! -f "$defaultFile" ]; then defaultFile=/etc/my.cnffiif [ ! -d "${LOGDIR}" ]; then mkdir -p ${LOGDIR}fiif [ ! -f "$CURRENTFILE" ]; then touch $CURRENTFILEfi echo "Start innobackup at `date`." >>${LOGFILE} echo "Current defaults file is : ${defaultFile}" >>${LOGFILE}echo "Current host is : ${Host}" >>${LOGFILE}echo "Current port is : ${mysqlPort}" >>${LOGFILE} echo "Current mysql user is : ${mysqlUser}" >>${LOGFILE} echo "Current password is : ${mysqlPassword}" echo "Current log directory is : ${LOGDIR}" >>${LOGFILE}echo "Current log file is : ${LOGFILE}" >>${LOGFILE} # Define backup function for full and incremental backup type.function back_full(){if [ ! -d "${TAGDIR}" ]; then mkdir -p ${TAGDIR}fi#create tagdirecho $TAGDIR,$TIMEFULL > ${BACK_HOME}/currentfileCHECKPOINTFILE=`cat ${BACK_HOME}/currentfile|awk -F, '{print $1}'`/checkpointif [ ! -f "${CHECKPOINTFILE}" ]; then touch ${CHECKPOINTFILE}fiecho "$CMD --defaults-file=$defaultFile --user=$mysqlUser --password=$mysqlPassword \ --no-timestamp $TAGDIR/full_${TIMESTAMP} \ " >> ${LOGFILE} $CMD --defaults-file=$defaultFile --user=$mysqlUser --password=$mysqlPassword \--no-timestamp $TAGDIR/full_${TIMESTAMP} 2>> ${LOGFILE}grep last_lsn $TAGDIR/full_${TIMESTAMP}/xtrabackup_checkpoints|cut -b 12- > ${CHECKPOINTFILE}echo "Current last lsn is : `grep last_lsn $TAGDIR/full_${TIMESTAMP}/xtrabackup_checkpoints|cut -b 12-`" >>${LOGFILE} } function back_inc(){CURRENTDIR=`cat ${BACK_HOME}/currentfile |awk -F, '{print $1}'`CHECKPOINTFILE=$CURRENTDIR/checkpointecho "$CMD --defaults-file=$defaultFile --user=$mysqlUser --password=$mysqlPassword \ --no-timestamp --incremental --incremental-lsn=`cat ${CHECKPOINTFILE}` ${CURRENTDIR}/inc_${TIMESTAMP} " >> ${LOGFILE} $CMD --defaults-file=$defaultFile --user=$mysqlUser --password=$mysqlPassword \ --no-timestamp --incremental --incremental-lsn=`cat ${CHECKPOINTFILE}` ${CURRENTDIR}/inc_${TIMESTAMP} 2>> ${LOGFILE}grep last_lsn ${CURRENTDIR}/inc_${TIMESTAMP}/xtrabackup_checkpoints|cut -b 12- >${CHECKPOINTFILE} echo "Current last lsn is : `grep last_lsn ${CURRENTDIR}/inc_${TIMESTAMP}/xtrabackup_checkpoints|cut -b 12-` " >>${LOGFILE}}FULLDAY=`cat ${CURRENTFILE}|awk -F, '{print $2}'`if [ ! -z "${FULLDAY}" ]thenDAYMIS=`expr $TIMEFULL - $FULLDAY`DAYALL=`expr $DAYMIS / 86400`fiif [ -z "${FULLDAY}" ] then back_fullelif [ "${DAYALL}" -ge "$RETENTION" ]thenback_fullelseback_incfi
例如:
[root@mysql1 test2]# ./1.sh --backup-dir=/data --defaults-file=/usr/local/mysql/my.cnf --host=127.0.0.1 --port=3306 --user=root --password=root
备份完成后在/data/backup目录下为备份目录
[root@mysql1 backup]# lscurrentfile log TAG20151109 TAG20151113 TAG20151120
每个TAG打头的目录里面都有一个完整的全备和N个增量备份,当执行的时间超过保留的策略的时候,会新建一个TAGXXXX目录存放新的全备和增量备份,log里面存放的是所有的备份日志。
[root@mysql1 backup]# ls -ltotal 20-rw-r--r-- 1 root root 36 Nov 20 00:07 currentfiledrwxr-xr-x 2 root root 4096 Nov 20 00:07 logdrwxr-xr-x 5 root root 4096 Nov 13 00:00 TAG20151109drwxr-xr-x 4 root root 4096 Nov 13 00:01 TAG20151113drwxr-xr-x 5 root root 4096 Nov 20 00:07 TAG20151120
0 0
- mysql备份bat备份脚本
- mysql备份bat备份脚本
- mysql备份脚本
- Mysql备份的脚本
- mysql自动备份脚本
- MySQL备份脚本
- MYSQL自动备份脚本
- Mysql备份脚本
- MySQL备份脚本
- mysql自动备份脚本
- mysql备份脚本
- MySQL数据库备份脚本
- 自动备份mysql脚本
- mysql 备份脚本实例
- mysql 备份数据库脚本
- mysql备份shell脚本
- mysql备份脚本
- mysql备份脚本
- NOIP 2014 Day1 T3飞扬的小鸟
- MapReduce 学习日志之我的MapReduce程序学习
- poj 2502 Suwbay【floyd】
- Matlab2014a(64-bit)安装libsvm3.12
- FZU 1901 Period II (kmp)
- mysql备份脚本
- 开源基于Face++的Android应用刷脸神器(HowOld)
- 快速排序——java实现
- Android 高清加载巨图方案 拒绝压缩图片
- mark
- js创建对象的模式介绍
- java基础之static关键字
- 可以充放电2000次的锂空气电池
- 事务的四大特性