cat xtrabackup_mysql.sh

#!/bin/bash
#title :xtrabackup_mysql.sh
#description :backup mysql by using xtrabackup
#author :weavepub
#date :20190529
#version :1.0
#crontab :0 */2 * * * sh /usr/local/bin/xtrabackup_mysql.sh >>/opt/log/xtrabackup_mysql.out 2>&1
OFDAY="`date "+%u"`"
LASTWEEKENDDAY="`date -d '-'$OFDAY' day' "+%Y-%m-%d"`"
TODAY="`date +%Y-%m-%d`"
HOST="localhost"
PORT=""
BACKUP_USER="root"
BACKUP_PWD=""
FULLBACKUP_DIR="/opt/mysqlbackup/xtrabackup/fullbackup/"
INCREMENTAL_DIR="/opt/mysqlbackup/xtrabackup/incremental/"
LOG_FILE="/opt/log/xtrabackup_mysql.sh.log"
log(){
msg=$1
now=`date "+%Y-%m-%d %H:%M:%S"`
echo $now $msg >>$LOG_FILE
}
fullbackup(){
res=$(find $FULLBACKUP_DIR -type d -name $TODAY*)
if [ "$res" = "" ];then
log "start fullbackup"
innobackupex --host ${HOST} --port ${PORT} --user=${BACKUP_USER} --password=${BACKUP_PWD} ${FULLBACKUP_DIR}
else
log "already fullbackup today"
fi
} incrementalbackup(){
if [ $# -lt 1 ];then
log "using: incrementalbackup fullbackup_time[2016-09-25]"
return 1
fi
FULLBACKUP_TIME=$1
LAST_FULLBACKUP_DIR=$(find $FULLBACKUP_DIR -type d -name $FULLBACKUP_TIME*)
log "LAST_FULLBACKUP_DIR:"$LAST_FULLBACKUP_DIR
if [ "$LAST_FULLBACKUP_DIR" = "" ];then
log "LAST_FULLBACKUP not found"
return 1
fi
if [ -d ${LAST_FULLBACKUP_DIR} ];then
log "start incremental backup"
innobackupex --host=${HOST} --port=${PORT} --user=${BACKUP_USER} --password=${BACKUP_PWD} --incremental ${INCREMENTAL_DIR} --incremental-basedir=$LAST_FULLBACKUP_DIR
else
log "LAST_FULLBACKUP not found"
fi
} clean_full_backup(){
### clean mysql fullbackup file,please only run weekend OLDEST_DAY=$(date -d '1 week ago' -I)
OLDEST_TIMESTAMP=$(date -d "$OLDEST_DAY" +%s) if [ -d $FULLBACKUP_DIR ];then
cd $FULLBACKUP_DIR
for DIR in *
do
DAY=${DIR%%_*}
TIMESTAMP=$(date -d "$DAY" +%s)
if [ $TIMESTAMP -lt $OLDEST_TIMESTAMP ];then
rm -rf $DIR
log "clean dir $FULLBACKUP_DIR/$DIR"
fi
done
fi
} clean_incremental_backup(){
### clean mysql incremental backup file,please only run everyday OLDEST_DAY=$(date -d '1 day ago' -I)
OLDEST_TIMESTAMP=$(date -d "$OLDEST_DAY" +%s) if [ -d $INCREMENTAL_DIR ];then
cd $INCREMENTAL_DIR
for DIR in *
do
DAY=${DIR%%_*}
TIMESTAMP=$(date -d "$DAY" +%s)
if [ $TIMESTAMP -lt $OLDEST_TIMESTAMP ];then
rm -rf $DIR
log "clean dir $INCREMENTAL_DIR/$DIR"
fi
done
fi
} main(){
if [ ! -d $FULLBACKUP_DIR ];then
mkdir -p $FULLBACKUP_DIR
fi
if [ ! -d $INCREMENTAL_DIR ];then
mkdir -p $INCREMENTAL_DIR
fi
if [ "$OFDAY" = "" ];then
fullbackup
clean_full_backup
else
incrementalbackup $LASTWEEKENDDAY
clean_incremental_backup
fi
}
main

crontab -e

#xtrabackup
0 */2 * * * sh /opt/mysqlbackup/scripts/xtrabackup_mysql.sh >>/opt/log/xtrabackup_mysql.out 2>&1

mysql全量+增量备份脚本的更多相关文章

  1. mysql全备、增量备份脚本

     1.mysql全量备份及定时删除备份文件脚本 #!/bin/bash v_user="root" v_password="mysql" backup_date ...

  2. Xtrabackup全量 增量备份详解

    xtrabackup是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,具有开源,免费,支持在线热备,备份恢复速度快,占用磁盘空间小等特点,并且支持不同情况下的多种备份 ...

  3. mysql全量和增量备份详解(带脚本)

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...

  4. Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份 ...

  5. mysql数据库的增量备份和全备

    还有一种简单的方法 参考 https://blog.csdn.net/u010098331/article/details/50932064 (注意:5.6版本以上新加了gtid 功能,gtid开启之 ...

  6. Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录

    在日常的linux运维工作中,大数据量备份与还原,始终是个难点.关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex.innobacku ...

  7. liunx系统mysql全量备份和增量备份

    前提 ​ 在互联网项目中最终还是读数据进行操作,都离不开曾删改查,那么数据是重中之重,数据库的备份就显得格外重要. ​ 但是每次都直接导出整个数据库的sql文件,显然是不现实的.对数据库的性能影响比较 ...

  8. Mysql备份系列(4)--lvm-snapshot备份mysql数据(全量+增量)操作记录

    Mysql最常用的三种备份工具分别是mysqldump.Xtrabackup(innobackupex工具).lvm-snapshot快照.前面分别介绍了:Mysql备份系列(1)--备份方案总结性梳 ...

  9. 【MySQL】全量+增量的备份/恢复

    生产环境中,有时需要做MySQL的备份和恢复工作.因MySQL是在运行过程中的,做全量备份需要时间,全量备份完成后又有数据变动,此时需要增量备份辅助.如果想恢复数据到一个空库(例如数据迁移或者上云等更 ...

随机推荐

  1. export default 和 export 的主要区别

    export default 和 export 的主要区别 在于对应的import的区别:export 对应的 import 需要知道 export抛出的变量名或函数名 import{a,b}expo ...

  2. redux学你参考网站

    redux官方网站 http://cn.redux.js.org/docs/api/combineReducers.html https://www.redux.org.cn 从设计的角度看Redux ...

  3. Spring核心模块解析

    Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶.Spring从1.x发展到现在的5.x可以说是越来越强大,下面来看看Spring都包含哪些核心的 ...

  4. BZOJ 3561: DZY Loves Math VI 莫比乌斯反演+复杂度分析

    推到了一个推不下去的形式,然后就不会了 ~ 看题解后傻了:我推的是对的,推不下去是因为不需要再推了. 复杂度看似很大,但其实是均摊 $O(n)$ 的,看来分析复杂度也是一个能力啊 ~ code: #i ...

  5. ajax下post提交方式下载文件的处理(转)

    ajax是不能直接下载文件的,所以一般都是通过一个超链接的形式去下载一个文件 但是当牵扯到需要发送很多数据到服务器上再下载的时候超链接的形式就有些不好看了, /*=================== ...

  6. [Gamma阶段]第九次Scrum Meeting

    Scrum Meeting博客目录 [Gamma阶段]第九次Scrum Meeting 基本信息 名称 时间 地点 时长 第九次Scrum Meeting 19/06/05 大运村寝室6楼 20min ...

  7. 冰多多团队-第九次Scrum例会

    冰多多团队-第九次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj debug, IAT debug, IAT 牛雅哲 debug, IAT 接通新的语音识别接口和termux,完成 ...

  8. TensorFlow2.0初体验

    TF2.0默认为动态图,即eager模式.意味着TF能像Pytorch一样不用在session中才能输出中间参数值了,那么动态图和静态图毕竟是有区别的,tf2.0也会有写法上的变化.不过值得吐槽的是, ...

  9. mod_spatialite.so.7

  10. Jenkins 使用 SonarQube 扫描 Coding

    Jenkins 使用 SonarQube 扫描 Coding   系统环境: Jenkins 版本:2.176 SonarQube 版本:7.4.0 一.SonarQube 介绍 1.SonarQub ...