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. First-class function

    https://en.wikipedia.org/wiki/First-class_function In computer science, a programming language is sa ...

  2. Aizu2249-Road Construction-(Dijkstra)

    https://vjudge.net/problem/Aizu-2249 题意:计划图中有n个城市m条路,首都是1号城市,要选一些路去修,让各个城市到首都的路径最短,在路径最短的情况下修路费用最小. ...

  3. LeetCode 499. The Maze III

    原题链接在这里:https://leetcode.com/problems/the-maze-iii/ 题目: There is a ball in a maze with empty spaces ...

  4. Json提取器(Json Extractor)

    Variable names:保存的变量名,后面使用${Variable names}引用 JSON Path  expressions:调试通过的json path表达式 Match Numbers ...

  5. Jupyter的快捷键使用

    命令模式 (按键 Esc 开启) Enter : 转入编辑模式 Shift-Enter : 运行本单元,选中下个单元 Ctrl-Enter : 运行本单元 Alt-Enter : 运行本单元,在其下插 ...

  6. Aquameta 基于postgresql的web 开发平台

    Aquameta 是一个完全基于pg 开发的web平台 ,目前还在开发中. 当前支持的功能 meta 写入系统信息到pg bundle 基于pg 类似git 的文件系统 filesystem 双向文件 ...

  7. 洛谷2051 [AHOI2009]中国象棋

    题目链接 题意概述:n行m列棋盘放若干个棋子每行每列最多两个求方案总数,答案对9999973取模. 可以比较容易看出这是个dp,设f[i][j][k]表示前i行j列放1个棋子k列放2个棋子的方案总数. ...

  8. Python运行语法错误:IndentationError: unindent does not match any outer indentation level

    python脚本没有对齐.新的Python语法,是不支持的代码对齐中,混用TAB和空格的.

  9. Fluent导出残差总结

    在使用Fluent进行求解的时候,有时候我们需要将求解的残差提取出来,进行后续的处理,我们可以采用下面的方法将Fluent求解残差输出.下面我们用一个简单的二维算例来说明(算例来源于:https:// ...

  10. JDBC PreparedStatement Statement

    参考:预编译语句(Prepared Statements)介绍,以MySQL为例 1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相 ...