IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL定时整库备份&滚动删除指定日期前的备份数据 -> 正文阅读

[大数据]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年的年份进行删除
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:53:18  更:2022-07-03 10:54:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:38:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码