MySQL定时整库备份&滚动删除指定日期前的备份数据

需求描述

实现如下MySQL备份功能:

1、对MySQL库表schema 及 数据 进行定时备份
2、滚动删除指定日期(如30天)前的所有备份数据

测试脚本

vim /data/backup/scripts/MySQL_Backup.sh

#!/bin/bash

# Desc:
#   1. Implements all MySQL databases backup 
#   2. Implements Rolling delete data 30 days ago

set -x

USERNAME="DB_Backuper"
PASSWORD="DB_Backuper"
DBHOST="localhost"
PORT=3306

MySQL_BACKUP_DBLIST="db_1|db_2|db_3|db_4|db_5"
MySQL_STORAGE_BACKUP_PATH="/data/backup/data"
MySQL_BIN_PATH="/usr/bin"

Y_DIR=`(date "-d 0 day ago" +%Y)`
M_DIR=`(date "-d 0 day ago" +%Y%m)`
D_DIR=`(date "-d 0 day ago" +%Y%m%d%H%M)`

Y_LAST_DIR=$(date +%Y "-d -1 year")
TWO_YEARS="$Y_LAST_DIR|$Y_DIR"

# N days ago's data will be deleted
N=30

echo -e "*****************************************"
echo ">>>>>>>>>>>>>>>>>>>>>>> backup started on" `date +%Y/%m/%d--%k:%M:%S`;

for DB in `echo ${MySQL_BACKUP_DBLIST//|/ }`; 
	do

	mkdir -p $MySQL_STORAGE_BACKUP_PATH/$DB/$Y_DIR/$M_DIR/$D_DIR
	DB_BACKUP_PATH=$MySQL_STORAGE_BACKUP_PATH/$DB/$Y_DIR/$M_DIR/$D_DIR

	$MySQL_BIN_PATH/mysqldump --host=$DBHOST --user=$USERNAME --password=$PASSWORD --port=$PORT --opt --triggers --routines --single-transaction --set-gtid-purged=OFF $DB | sed 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' > $DB_BACKUP_PATH/$DB.sql

	# Rolling delete data N days ago
	for YEAR in `echo ${TWO_YEARS//|/ }`;do
	    PATH_TOBE_CHECK=$MySQL_STORAGE_BACKUP_PATH/$DB/$YEAR
	    if [ -d $PATH_TOBE_CHECK ];then
	        find $PATH_TOBE_CHECK -type d -mtime +$N | xargs rm -rf
	    fi
	done
done;

echo ">>>>>>>>>>>>>>>>>>>>>>> backup ended   on" `date +%Y/%m/%d--%k:%M:%S` 
echo -e "*****************************************"

说明:

  1. 文本替换
    for … in 语法中要求数据需要以空格分割, 这里需要对数据库列表进行文本替换
    ${MySQL_BACKUP_DBLIST//|/ }
    注意}前有一个空格
    当然也可以使用sed来做文本替换.
  1. 判断文件夹(或文件)非空
    如果文件夹或文件为空,则在删除时会报错,这里只需要对已存在的文件(夹)做删除操作即可.
    ① 判断文件夹是否存在: if [ -d $PATH_TOBE_CHECK ]
    ② 判断文件夹不存在: if [ ! -d $PATH_TOBE_CHECK ]
    ③ 如果判断是文件类型, 只需要把"-d"参数替换为"-f"参数.
  1. 跨年时前一年数据无法删除的问题(思路可以再优化)
    指定近2年的年份进行删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值