CentOS 7 定时任务 + Shell 脚本自动备份 MySQL 数据库(一次 Halo 建站数据库丢失的教训)

news/发布时间2024/6/16 22:59:05

文章目录

    • 前置条件
    • 创建备份脚本
    • 设置 Cron 任务
    • 测试备份脚本
    • 备份安全和维护
    • 一键恢复
    • 自动清除备份文件
    • 常见问题
    • 总结

TIP:
原文链接阅读体验更佳:CentOS 7 自动备份 MySQL 数据库


最近抽空简单搭了一个博客,目前内容较少,后续陆续发文同步过去,强烈建议小伙伴们关注一波,一起成长,一起进步!(首页右上角有彩蛋哦 🥳)

起因:最近在通过 halo 搭建个人博客的是否,第二天醒来惊讶的发现自己的数据库没了!于是经过左思右想决定进行一些兜底处理,避免灾难的二次发生。
在这篇文章中,我们将探讨如何在 CentOS 7 系统上为 MySQL 数据库设置自动备份。这对于确保您的数据安全和完整性至关重要,特别是对于重要的业务数据。我们将使用 mysqldump 工具来备份测试的 halo 数据库,并通过 cron 实现自动化。

前置条件

  • 拥有 CentOS 7 服务器。
  • 安装并运行 MySQL 数据库。
  • 有足够的权限来创建备份脚本并设置 cron 任务。

创建备份脚本

使用文本编辑器(如 nanovi),创建一个新的备份脚本:

sudo vi /usr/local/bin/mysql_backup.sh

然后,复制并粘贴以下脚本:

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/path/to/backup"
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="halo"mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > "$BACKUP_DIR/halo_backup_$DATE.sql"

替换 BACKUP_DIRDB_USERDB_PASSWORD 为你的实际备份目录和 MySQL 凭据。

可以为 BACKUP_DIR 添加一下执行权限:

sudo chmod -R 700 /path/to/backup

使脚本可执行:

sudo chmod +x /usr/local/bin/mysql_backup.sh

设置 Cron 任务

编辑 cron 表:

sudo crontab -e

cron 表的底部添加一行来定时运行备份脚本。例如,要每天凌晨 2 点运行备份,添加:

0 2 * * * /usr/local/bin/mysql_backup.sh

这行指令意味着每天的 02:00 执行脚本。

测试备份脚本

手动运行备份脚本:如果执行失败请看【常见问题一节】

/usr/local/bin/mysql_backup.sh

检查备份文件,确保在指定的 BACKUP_DIR 中出现了新的 SQL 备份文件。

img

备份安全和维护

  • 存储安全:考虑将备份文件存储在安全的位置,如外部硬盘或云存储服务。
  • 定期检查:定期检查 cron 日志和备份目录,确保备份过程按计划运行。
  • 老旧备份清理:根据存储空间和备份策略,定期清理旧的备份文件。

一键恢复

备份文件是有了,那么我们又该如何快速恢复呢?

那自然是再创建一个 Bash 脚本,用于从指定备份目录中恢复 MySQL 数据库。这个脚本假设你的备份是用 mysqldump 创建的 SQL 文件,并且你已经知道要恢复的具体文件名(从备份文件中选择具体恢复时间节点的备份文件)。

创建并编辑恢复脚本:

sudo vi /usr/local/bin/mysql_restore.sh

恢复脚本内容如下:

#!/bin/bash# 设置数据库凭据
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="halo"# 设置备份目录
BACKUP_DIR="/path/to/backup"# 检查是否提供了文件名
if [ "$#" -ne 1 ]; thenecho "Usage: $0 <backup-file.sql>"exit 1
fi# 获取备份文件名
BACKUP_FILE=$1# 完整路径
FULL_PATH="$BACKUP_DIR/$BACKUP_FILE"# 检查文件是否存在
if [ ! -f "$FULL_PATH" ]; thenecho "Backup file not found: $FULL_PATH"exit 1
fi# 恢复数据库
mysql -u $DB_USER -p$DB_PASSWORD $DB_NAME < $FULL_PATHecho "Database restored from $FULL_PATH"

赋予脚本执行权限:

chmod +x /usr/local/bin/mysql_restore.sh

在恢复数据时,先查看备份数据:

img

然后执行恢复脚本即可:

/usr/local/bin/mysql_restore.sh halo_backup_20240224_123243.sql

注意事项:

  1. 确保在运行恢复脚本之前数据库 halo 已经存在。如果不存在,需要先创建它。
  2. 这个脚本将会替换目标数据库中现有的所有数据。在执行恢复操作之前,请确保没有重要数据会被不可逆地覆盖。
  3. 为了安全起见,最好在执行这类操作前备份当前数据库状态。
  4. 确保脚本中的用户名和密码与您的 MySQL 安装匹配,并根据需要调整它们。

自动清除备份文件

如果服务器资源紧张,我们不能无休止地存储数据库的备份文件,这时就需要在每次定时任务备份前执行一些清理逻辑。(当然,这是可选的操作)

为了自动清除旧的备份文件并仅保留最近七天的备份,可以在现有的 /usr/local/bin/mysql_backup.sh 脚本中添加一些代码来实现这一功能。这样,每次脚本运行时,它不仅会创建新的备份,还会清理旧的备份文件。

打开备份脚本进行编辑:

sudo vi /usr/local/bin/mysql_backup.sh

以下是修改后的脚本,包括自动清除旧备份的功能:

#!/bin/bash# 设置数据库凭据
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="halo"# 设置备份目录
BACKUP_DIR="/path/to/backup"# 当前日期
DATE=$(date +%Y%m%d_%H%M%S)# 备份数据库
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > "$BACKUP_DIR/halo_backup_$DATE.sql"# 清除超过7天的旧备份
find $BACKUP_DIR -name "halo_backup_*.sql" -type f -mtime +7 -exec rm {} \;echo "Backup complete, old backups cleared."

如果之前没有设置执行权限,运行:

sudo chmod +x /usr/local/bin/mysql_backup.sh

手动运行脚本以确保一切正常:

/usr/local/bin/mysql_backup.sh

检查备份是否创建成功,并且检查是否旧文件被正确删除。

注意事项:

  1. 这个脚本中的 find 命令会删除超过 7 天的备份文件。-mtime +7 表示匹配所有修改时间超过 7 天的文件。
  2. 在执行删除操作之前,find 命令不会有任何提示。如果你想在删除之前查看哪些文件将被删除,可以先运行 find $BACKUP_DIR -name "halo_backup_*.sql" -type f -mtime +7 命令。
  3. 确保脚本中的路径和文件名与实际备份文件匹配。
  4. 在正式部署此脚本之前,建议在一个安全的环境中进行测试,以避免意外数据丢失。

常见问题

如果出现错误提示:

[root@lavm-zzgegfex4j backup]# /usr/local/bin/mysql_backup.sh
/usr/local/bin/mysql_backup.sh: line 8: mysqldump: command not found

是因为脚本在执行时无法找到 mysqldump 命令。这通常是由于环境变量未正确设置或 mysqldump 未安装在默认的路径下导致的。

确保 mysqldump 确实已安装,可以通过运行以下命令来验证:

which mysqldump

或者:

mysql --version

这些命令应该返回 mysqldump 的路径或 MySQL 的版本信息。

如果 mysqldump 已安装但不在标准路径中,需要找到其完整路径。运行以下命令:

sudo find / -name mysqldump

img

找到 mysqldump 的完整路径后,更新备份脚本,将 mysqldump 替换为其完整路径。例如,如果 mysqldump 的路径是 /usr/bin/mysqldump,则将脚本中的相关行更新为:

/usr/local/mysql8/bin/mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > "$BACKUP_DIR/halo_backup_$DATE.sql"

另一个解决方案是将 mysqldump 的路径添加到您的 PATH 环境变量中。这可以通过编辑 /etc/profile 文件来完成。例如:

vim /etc/profileexport PATH=$PATH:/usr/local/mysql8/bin

之后,运行 source /etc/profile 以使更改生效。

总结

通过上述步骤,现在已经在你的 CentOS 7 服务器上成功设置了 MySQL 数据库的自动备份。这不仅保护你的数据免受意外丢失的风险,还为可能出现的灾难性事件提供了重要的数据恢复手段。定期备份是任何数据管理策略的关键部分,不容忽视。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/OiuS/8662.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

自动驾驶框架:自动驾驶汽车定位-感知-规划-决策-控制概述,按照我的架构图理解:决策决定的是速度,规划决定的是路径(架构理解推荐)

1.按照我的架构图理解&#xff1a;决策决定的是速度&#xff0c;规划决定的是路径 参考链接&#xff1a;【自动驾驶】运动规划丨速度规划丨自动驾驶速度规划及状态协调方法 2.下面是参考别人的理解&#xff1a; 自动驾驶汽车定位-感知-规划-决策-控制概述 规划-决策-控制知…

【项目部署上线】宝塔部署前端Docker部署后端

【项目部署上线】宝塔部署前端&Docker部署后端 文章目录 【项目部署上线】宝塔部署前端&Docker部署后端1.安装依赖1.1 安装mysql1.2 安装Canal1.3 安装redis1.4 安装rabbitmq1.5 安装nacos 2. 部署前端3. 部署后端 1.安装依赖 1.1 安装mysql docker run -d -p 3306:3…

JavaWeb——008MySQL(多表查询事务索引)

数据库开发-MySQL 数据库 数据库开发-MySQL1. 多表查询1.1 概述1.1.1 数据准备1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 1.5 案例 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2…

flutter插件开发基础教程

前言 虽然现在已经有很多插件了&#xff0c;但是有时候还是需要自己开发一个插件。因此打算学习一下如何开发一个插件。这里只考虑安卓&#xff0c;安卓使用kotlin&#xff0c;kotlin不会也没事&#xff0c;我也不会。 参考项目&#xff1a;https://github.com/TBoyLi/flutte…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

java 通过 microsoft graph 调用outlook

废话不多说 一 官方文档 先看一下官方文档&#xff0c;https://learn.microsoft.com/zh-cn/graph/tutorials/java?contextoutlook%2Fcontext&tabsaad&tutorial-step1 其中的代码&#xff0c;可以通过地址下载&#xff1a;https://developer.microsoft.com/en-us/gra…

Go语言基本语法

Go语言基本语法 设置 GOPATH 环境变量 开始写 go 项目代码之前&#xff0c;需要我们先配置好环境变量。编辑 ~/.bash_profile&#xff08;在终端中运行 vi ~/.bash_profile 即可&#xff09;来添加下面这行代码&#xff08;如果你找不到 .bash_profile&#xff0c;那自己创建…

特征融合篇 | YOLOv8 引入通用高效层聚合网络 GELAN | YOLOv9 新模块

今天的深度学习方法专注于如何设计最合适的目标函数,以使模型的预测结果最接近真实情况。同时,必须设计一个合适的架构,以便为预测提供足够的信息。现有方法忽视了一个事实,即当输入数据经过逐层特征提取和空间转换时,会丢失大量信息。本文将深入探讨数据通过深度网络传输…

32单片机基础:TIM定时中断

STM32中功能最强大&#xff0c;结构最复杂的一个外设——定时器 因为定时器的内容很多&#xff0c;所以本大节总共分为4个部分&#xff0c;8小节。 第一部分&#xff1a;主要讲定时器基本的定时功能,也就是定一个时间&#xff0c;然后让定时器每隔这个时间产生一个中断&#…

微服务-微服务API网关Spring-clould-gateway实战

1. 需求背景 在微服务架构中,通常一个系统会被拆分为多个微服务,面对这么多微服务客户端应该如何去调用呢? 如果根据每个微服务的地址发起调用,存在如下问题: 1.客户端多次请求不同的微服务,会增加客户端代码和配置的复杂性,维护成本比价高 …

【深度学习】Logistic回归算法和向量化编程。全md文档笔记(代码文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归&#xff08;含代码&#xff09;&#xff0c;熟练掌握numpy,pandas,sklearn等框架使用。在算法上&#xff0c;掌握神经网络的数学原理&#xff0c;手动实…

图论(算法竞赛、蓝桥杯)--拓扑排序

1、B站视频链接&#xff1a;D01 拓扑排序_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N100010; int n,m,a,b; vector<int> e[N],tp; int din[N]; bool topsort(){queue<int> q;for(int i1;i<n;i){if(din[i]0)q.push(i);}…

消息中间件篇之Kafka-高可用机制

一、 集群模式 1. Kafka的服务器端由被称为Broker的服务进程构成&#xff0c;即一个Kafka集群由多个Broker组成。 2. 这样如果集群中某一台机器宕机&#xff0c;其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。 二、分区备份机制 1. 一个…

MarkDown实用技巧:MarkDown中如何实现换行?

MarkDown实用技巧&#xff1a;MarkDown中如何实现换行&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望…

【Android 性能优化:内存篇】——ExoPlayer 释放后内存没有恢复问题探索

背景 最近笔者承接项目的内存优化指标&#xff0c;在内存调研的过程中发现项目中视频播放结束后&#xff0c;内存没有恢复到播放前到水平。项目中用的 EXO 版本为2.19.1&#xff0c;并且笔者自己也写了个简单的 Demo&#xff0c;发现也是如此。虽然有一些偏门方法可以优化&…

C++:类与对象(3)

创作不易&#xff0c;感谢三连 一、深入解析构造函数 如上图&#xff0c;在一般情况下&#xff0c;我们认为A类中的_a1和_a2只不过是声明&#xff0c;并没有开空间&#xff0c;而真正的空间开辟是在【定义】的时候&#xff0c;也就是我们根据这个类实例化出整个对象的时候。 …

前端学习---- 前端HTML基本元素的介绍

一&#xff1a;显示相关的HTML基础知识 1. 推荐的前端编写工具 2. VScode的html速写规则&#xff08;从a标签开始再用&#xff09; ①、&#xff01;&#xff1a;代表生成html的基本框架元素 ②、html元素&#xff1a;直接书写html,不需要加<>,按回车会自动生成 ③、{}…

matlab|基于DistFlow潮流的配电网故障重构(输入任意线路)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序采用适用于辐射状网络的DistFlow潮流模型&#xff0c;可输入任意故障线路编号&#xff0c;得到优化重构结果。这个程序是配电网故障重构可视化matlabyalmip的升级版&#xff0c;原来的程序是以电压质量作…

本科毕业设计:计及并网依赖性的分布式能源系统优化研究。(C语言实现)(内包含NSGA II优化算法)(一)

目录 前言 1、分布式能源系统模型介绍 2、运行策略 前言 本篇文章介绍的是我的毕业设计&#xff0c;我将C语言将其实现。 1、分布式能源系统模型介绍 这是我将研究的分布式能源系统的框架&#xff0c;内部供能装置包括&#xff1a;太阳能光伏板&#xff1b;sofc燃料电池、太阳…

Stable Diffusion 模型分享:Henmix_Real(人像、真实、写真、亚洲面孔)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 作者述&#xff1a;这个模型试图改变&#xff0c;以便西方人和亚洲人都能够表达得很好。此…
推荐文章