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

文章目录

    • 前置条件
    • 创建备份脚本
    • 设置 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.mzph.cn/news/701187.shtml

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

相关文章

Supermaven惊艳亮相:300,000个Tokens的超大上下文窗口,能否超越Copilot成为代码补全新王者?

当我看到GitHub宣布Copilot的年经常性收入突破1亿美元时&#xff0c;我意识到代码补全技术已经迈入了新的时代。 大型模型的崛起使得这些工具变得更加智能和实用&#xff0c;吸引了越来越多的开发者加入AI编码的行列。 在这个背景下&#xff0c;Supermaven发布了。这是第一个…

TikTok直播网络不稳定是什么原因

在当今社交媒体平台中&#xff0c;TikTok以其独特的视频内容和社交互动功能而备受欢迎。然而&#xff0c;尽管TikTok为用户提供了直播功能&#xff0c;但一些用户可能会遇到TikTok直播网络不稳定的问题。那么&#xff0c;TikTok直播网络不稳定的原因是什么呢&#xff1f;以下是…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第11章 项目成本管理(五)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

关于Arrays类中asList(T... a)泛型参数辨析

前提 我们需要知道两点 &#xff08;1&#xff09;T指的是泛型类型&#xff0c;它只能是引用类型&#xff0c;何为引用类型&#xff1f;在java中除了基本数据类型&#xff08;如byte、short、int、long、float、double、boolean、char&#xff09;之外的所有类型都是引用类型…

车载电子测试学习内容

搜集了一些车载测试的学习内容&#xff0c;大家可以参考。

从ChatGPT到Sora,来了解大模型训练中的存储

1 从chatGPT到Sora 2022年底&#xff0c;OpenAI推出人工智能聊天机器人ChatGPT&#xff0c;开启了大模型领域的“竞速跑”模式。2024年2月15日&#xff0c;随着视频生成模型Sora的横空出世&#xff0c;OpenAI再度掀起热潮。 Sora将视频生成内容拉到了一个全新的高度&#xff0c…

osmnx笔记:从OpenStreetMap中提取点和边的shp文件(FMM文件准备内容)

1 导入库 import osmnx as ox import time from shapely.geometry import Polygon import os import numpy as np 2 提取Openstreetmap 的graph Gox.graph_from_place(Huangpu,Shanghai,China,network_typedrive,simplifyTrue) ox.plot_graph(G) 3 提取graph中的点和边 gdf…

冯诺依曼体系结构 计算机组成的金字塔

01 冯诺依曼体系结构&#xff1a;计算机组成的金字塔 学习计算机组成原理&#xff0c;到底是在学些什么呢&#xff1f;这个事儿&#xff0c;一两句话还真说不清楚。不过没关系&#xff0c;我们先从“装电脑”这个看起来没有什么技术含量的事情说起&#xff0c;来弄清楚计算机到…

4 种策略让 MySQL 和 Redis 数据保持一致

先阐明一下 MySQL 和 Redis 的关系&#xff1a;MySQL 是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis 是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证 MySQL 和 Redis 中的数据一致&#xff08;即缓存一致性问…

2_怎么看原理图之协议类接口之UART笔记

通信双方先约定通信速率&#xff0c;如波特率115200 一开始时&#xff0c;2440这边维持高电平 1> 开始发送时&#xff0c;由2440将&#xff08;RxD0&#xff09;高电平拉低&#xff0c;并持续一个T的时间&#xff08;为了让PC机可以反应过来&#xff09;&#xff0c;T1/波…

汇编语言movs指令学习

字符串传送指令(Move String Instruction) movs 该指令是把指针DS:SI所指向的字节、字或双字传送给指针ES:DI所指向内存单元&#xff0c;并根据标志位DF对寄存器DI和SI作相应增减。该指令的执行不影响任何标志位。 记不清这指令是8086就有的&#xff0c;还是386以后新加的&…

C# OpenVINO PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

一种新型的AlGaN/GaN HEMTs小信号建模与参数提取方法

来源&#xff1a;A new small-signal modeling and extraction methodin AlGaN/GaN HEMTs&#xff08;SOLID-STATE ELECTRONICS 07年&#xff09; 摘要 本文提出了一种新型的用于GaN HEMTs&#xff08;氮化镓高电子迁移率晶体管&#xff09;的小信号等效电路&#xff0c;包含2…

Edting While Playing 瓦片地图编辑器开发整合导入自定义贴图 DEVC++ VS2022都可复制粘贴运行

接 多种类型图片模块读取-CSDN博客 与 Editing While Playing 使用 Easyx 开发的 RPG 地图编辑器 tilemap eaitor-CSDN博客 整合实现平面贴图纹理自定义 操作同上 导入步骤&#xff1a; 先运行程序&#xff0c;然后关闭&#xff0c;同目录下有四个文件夹&#xff0c; 把…

模型评估方式

文章目录 一、有监督-分类模型1、混淆矩阵2、分类模型的精度和召回率3、ROC曲线与AUC 二、有监督-回归模型1、均方误差MSE2、 R 2 R^2 R2决定系数3、回归模型代码示例 三、无监督模型1、kmeans求解最优k值的方法&#xff1a;轮廓系数、肘部法2、GMM的最优组件个数&#xff1a;A…

Vue+SpringBoot打造快递管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 快递类型模块2.3 快递区域模块2.4 快递货架模块2.5 快递档案模块 三、界面展示3.1 登录注册3.2 快递类型3.3 快递区域3.4 快递货架3.5 快递档案3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 …

vue3中ref创建变量取值时自动补充 .value 插件 volar

插件 TypeScript Vue Plugin (Volar) 设置中配置

进阶了解C++(2)——复杂的继承及其底层原理

在上篇文章中&#xff0c;给出了关于继承这部分的相关知识&#xff0c;例如继承的定义&#xff0c;继承与默认成员函数等。本文将针对复杂的继承方式&#xff0c; 1. 复杂的继承方式&#xff1a; 1.1 单继承&#xff1a; class Professor { public:int _age;string _name; }…

Windows安装HBuilderX

下载 HBuilderX下载地址: 下载地址 解压安装包 HBuilderX&#xff0c;Windows为zip包&#xff0c;解压后才能使用。 首先&#xff0c;选中下载的zip包&#xff0c;点击右键菜单&#xff0c;点击解压到当前文件夹进入解压后的文件夹&#xff0c;找到HBuilderX.exe&#xff0…

计算机组成原理(13)-----硬件多线程

目录 1.细粒度多线程 2.粗粒度多线程 3.同时多线程&#xff08;SMT&#xff09; 在不支持硬件多线程的处理器中&#xff0c;若要进行线程的切换&#xff0c;就需要保存和恢复线程的运行环境&#xff08;否则会出现数据覆盖引起的错误&#xff09;。 但在支持硬件多线程的处…