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. 数据分析 - Matplotlib

    简介 Matplotlib是一个强大的Python绘图和数据可视化的工具包.数据可视化也是我们数据分析的最重要的工作之一,可以帮助我们完成很多操作,例如:找出异常值.必要的一些数据转换等.完成数据分析 ...

  2. layoutSubviews的缺省实现是使用约束进行布局

    Discussion The default implementation of this method does nothing on iOS 5.1 and earlier. Otherwise, ...

  3. Arduino在串口监视器上输出字母表

    程序会在Arduino IDE的串口监视器上输出一个字母表. 不需要额外电路,但是板子必须通过串口线或USB线连接到电脑. 代码 程序在setup()函数中建立串口连接,然后逐行输出a~z的字母I表, ...

  4. JSON Web Token (JWT) - Introduction

    To validate the challenge, connect as admin.------------以admin登陆 https://jwt.io/introduction/        ...

  5. cloudevents js sdk 简单试用

    cloudevents 目前官方提供了不同语言的sdk,以下是js 的简单学习试用,从目前来说更新不是很好 clone 代码 git clone https://github.com/cloudeve ...

  6. MySQL 8.0.18 InnoDB Cluster 主从(MGR)完整安装配置

    提示: MySQL InnoDB Cluster底层依赖Group Replication模式,至少3台机器 1.  准备3台 CentOS Linux 7 (Core), 修改各主机名:db-hos ...

  7. Java实现一个简单的事件监听器

    关于事件监听我们需要知道的一些基础知识. a)事件三要素(who when what): source -- 事件源 when -- 事件发生时间 message -- 事件主题消息,即希望通过事件传 ...

  8. SQLSERVER|CDC日志变更捕获机制

    一.什么是CDC? 变更数据捕获(Change Data Capture ,简称 CDC)记录 SQL Server 表的插入.更新和删除活动.SQLServer的操作会写日志,这也是CDC捕获数据的 ...

  9. JVM 最多支持多少个线程?

    阅读本文大概需要 2.8 分钟. 原文:www.jb51.net/article/49087.htm McGovernTheory 在 StackOverflow 提了这样一个问题: Java 虚拟机 ...

  10. 强烈建议为你的Android项目加上 largeHeap 属性

    小内存机器使用“微信”时,看视频经常崩溃(out of memory) ,小内存机器有时候明明内存还很多,却还是抛出“内存不够”,应该就是每个APP能用“堆大小”的限制. 如上图,Android项目的 ...