MySQL数据库的定时备份实践
创始人
2025-05-30 18:08:23
0

1.背景介绍

也许你会发现本站建站时间久远,但是本站的各类访问量总是很低,这大概是有两个方面的原因,其一是因为本站升级2.0后,所有的文章访问数据并未同步(不仅仅是文章,所有的数据均为同步,比如用户数据等,也许是这些数据并不重要吧);另一个原因则是大概在十天前执行了一个update语句(默认的MySQL客户端事务为自动提交的),把所有文章的访问量全给清零了,关于系统全站的访问量数据也是本站2.0近期(一个月内)才完善增加的,前者原因是主动放弃的,后者却是自己失误所致,所以本篇文章主要是来实现一个MySQL数据库的定时备份,也算是让数据更加安全点吧(也许站点被黑,资料被丢失了呢)。

2.备份脚本

本篇文章所实现的MySQL数据库定时备份,主要是实现与个人的契合度较高的实现,若对数据有非常高的要求,则需要使用实时备份或同步的方式实现(不是本次实践的目的),以shell脚本的方式编写备份脚本文件,并加入至系统的定时任务中,被自动执行,参考备份脚本文件(命名为backup.sh)如下文所示。

#!/bin/bash#
# Copyright (c) 2023 by chendd 88911006
# 简单备份MySQL数据库脚本
# All rights reserved.#数据库IP
MYSQL_HOST="localhost"
# 数据库名称
MYSQL_DATABASE="chendd-blog"
# 数据库用户名
MYSQL_USERNAME="root"
# 数据库密码
MYSQL_PASSWORD="root"
# 备份根路径
BACKUP_DIR=$(cd `dirname $0`; pwd)
# 年月日时分秒
DATETIME=$(date +%Y%m%d_%H%M%S)# 如果不指定jdk则使用默认
if [[ -n "$MYSQL_HOME" ]] && [[ -x "$MYSQL_HOME/bin/mysqldump" ]]; thenMYSQL_EXE="$MYSQL_HOME/bin/mysqldump"
elif type -p mysqldump > /dev/null 2>&1; thenMYSQL_EXE=$(type -p mysqldump)
elif [[ -x "/app/mysql/bin/mysqldump" ]];  thenMYSQL_EXE="/app/mysql/bin/mysqldump"
elseecho "$(date "+%Y-%m-%d %H:%M:%S") ERROR Unable to find MySQL mysqldump" >> ${BACKUP_DIR}/backup.logexit 1
fi#输出一个空行
echo " " >> ${BACKUP_DIR}/backup.log
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 开始执行批次为 [$DATETIME] 的备份" >> ${BACKUP_DIR}/backup.log# 备份命令
COMMAND="$MYSQL_EXE --host=$MYSQL_HOST --user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD $MYSQL_DATABASE > $BACKUP_DIR/backup_${MYSQL_DATABASE}_${DATETIME}.sql"
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 开始备份数据库,命令为:$COMMAND" >> ${BACKUP_DIR}/backup.log
# 执行备份语句
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 结束备份" >> ${BACKUP_DIR}/backup.log
/bin/sh -c "$COMMAND"
# 压缩命令(保留压缩原sql文件)
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 开始压缩数据库文件" >> ${BACKUP_DIR}/backup.log
gzip -c $BACKUP_DIR/backup_${MYSQL_DATABASE}_${DATETIME}.sql > $BACKUP_DIR/backup_${MYSQL_DATABASE}_${DATETIME}.sql.gz
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 结束压缩" >> ${BACKUP_DIR}/backup.log#删除10天之前的备份
find ${BACKUP_DIR} -name backup_"*.sql" -type f -mtime +10 -exec rm -rf {} \; >> ${BACKUP_DIR}/backup.log
find ${BACKUP_DIR} -name backup_"*.sql.gz" -type f -mtime +10 -exec rm -rf {} \; >> ${BACKUP_DIR}/backup.logecho "$(date "+%Y-%m-%d %H:%M:%S") INFO 结束执行批次为 [$DATETIME] 的备份" >> ${BACKUP_DIR}/backup.log

3.备份脚本介绍

(1)假设脚本命令为《bachup.sh》,需要赋予可执行文件的权限;

(2)有限查找MYSQL_HOME的环境变量,如果找不到默认的MySQL安装路径为/app/mysql;

(3)配置的参数有MySQL数据库服务器IP、数据库用户名、数据库密码、数据库名称、备份文件路径,这些参数需要按需自行调整;

(4)每个关键脚本执行后输出一些提示至命令的日志记录文件《backup.log》中,格式为:日期时间 + 日志级别 + 描述信息;每次开始执行和结束执行分别有提示信息;

(5)默认只备份一个数据库,本脚本不适用于备份多个数据库的场景;

(6)生成备份sql文件的格式命名为《backup_数据库名_脚本执行日期_脚本执行时间.sql》;

(7)将生产的备份sql文件压缩为《backup_数据库名_脚本执行日期_脚本执行时间.sql.gz》的压缩包文件,文件压缩后默认不删除原sql格式文件;

(8)按照文件命名格式每次在执行后,将删除10天之前的文件,在实践过程中验证过删除1分钟之前备份文件的,且定时任务的触发频率为1分钟;

4.定时执行脚本

# 查看定时任务列表:每天临时0:30分触发
crontab -l
# 增加定时任务:
echo '30 0 0 * *  sh /app/backup.sh' >> /var/spool/cron/root
#刷新定时任务
service crond reload

5.运行结果

(手工运行脚本)

(脚本执行日志)

(脚本执行文件)

脚本下载:backup.zip

原文地址为个人博客地址,参考:https://www.chendd.cn/blog/article/1637269874421841921.html

相关内容

热门资讯

Django实现图书馆管理系统 1.创建项目library和应用程序 django-admin startproject libra...
python UDP、TCP ... 👨‍💻个人简介: 深度学习图像领域工作者 dz...
四川旅游攻略自由行攻略跟团游6... 四川之美:自然与文化的完美融合 四川旅游推荐!当地导游-乐乐:185 8335 5758(加他微信-...
【软考笔记】2. 操作系统基本... 进程管理 进程的状态前驱图PV 操作死锁问题 进程的状态 三状态:运行态、就绪态、等待...
【小猫爪】AUTOSAR学习笔... 【小猫爪】AUTOSAR学习笔记13-功能安全之WdogM模块前言1 看门狗架构2 WdogM模块功...
使用流水线插件实现持续集成、持... 流水线插件 是基于 Rainbond 插件体系 扩展实现,通过插件化的方式࿰...
DRBG_Instantiat... rd_key  0x3b +1 0x3c =   60 60个int = 2...
餐厅菜单变“考卷”?网友吵翻了... 餐厅菜单变“考卷”?网友吵翻了,这到底是创意还是噱头?最近,一家餐厅整了个“试卷菜单”,直接火出圈了...
西瓜节上有“宝藏”!天津静海台... 天津北方网讯:5月31日傍晚,在静海台头镇北二堡村,“瓜田奇遇 清凉之旅”第十一届台头西瓜文化旅游节...
机器学习笔记之集成学习(五)梯... 机器学习笔记之集成学习——梯度提升树[GBDT]引言回顾:Boosting\text{...
vmware中centos7实... 前言 在开发收银系统SAAS版本时,采用的是centos服务器,经常需要...
开源物联网平台推荐介绍 开源物联网平台调研 文章目录开源物联网平台调研一、 调研推荐开源物联网平台及背景介绍二、社区支持度与...
“端午”假期刚开始,无锡这里上... 迎着今年“端午”假期的开启,5月30日晚,位于无锡市惠山古镇景区的“宝善坊”正式开街,上演“人从众”...
学习Java——泛型 目录 什么是泛型 泛型带来的问题 1、当泛型遇到重载 2、当泛型遇到catch 3、当泛型内包含静态...
HTTP协议协议报文结构请求响... 目录 一. 何为HTTP 1. 简单理解HTTP协议的工作过程  2. Fiddler抓包工具  2...
[ 漏洞复现篇 ] Jooml... 🍬 博主介绍 👨‍🎓 博主介绍:大家好...
【类和对象的使用的知识点——案... 文章目录类和对象的使用的知识点封装封装的意义struct和class区别成员属性设置为私有对象的初始...
青瓜虾滑饼:清爽黄瓜与鲜嫩虾滑... 准备材料:黄瓜虾滑盐白胡椒粉具体步骤: 黄瓜刨丝:将黄瓜刨成细丝。点盐杀出水分:在黄瓜丝上撒适量的...