用 Shell 脚本实现 MySQL 数据库每日自动备份

:2025年05月16日 web攻防
分享到:

本文介绍了一种用 Shell 脚本自动备份 MySQL 数据库的方法。文章详细解释了为什么要备份数据库、备份思路、准备备份文件、编写脚本文件和执行脚本等步骤,并提供了一步全注释的 Shell 脚本示例。

本文带你一步步动手用 Shell 脚本自动备份 MySQL 数据库,即使你是刚入门的小白也能学会。从环境准备到脚本编写到定时执行,保姆级讲解!

一、为什么需要数据库备份?

数据库是 Web 应用的核心资产,一旦丢失,后果不堪设想。比如:

  • 博客数据没了?

  • 订单信息丢了?

  • 用户账号密码没了?

所以我们要定期备份,哪怕出了问题也能快速恢复。

二、备份思路与目标

我们希望:

  1. 每天自动执行一次备份

  2. 备份文件保存到 /home/backup/

  3. 文件名包含日期,如:mydb_2025-05-15.sql

  4. 自动压缩为 .tar.gz 节省空间

  5. 保留最近 7 天的备份,自动清理旧文件

三、准备工作(一步不落)

检查是否已安装 mysqldump

bash

which mysqldump

如果输出路径如 /usr/bin/mysqldump,说明已安装。

如果没有,使用以下命令安装(centos):

bash

sudo yum update

sudo yum install mysql-client

四、Shell 脚本编写(全注释)

创建脚本文件:

bash

nano /home/backup/mysql_backup.sh

粘贴以下内容

bash

#!/bin/bash

# 数据库信息配置

DB_USER="root"          # 数据库用户名

DB_PASSWORD="123456"    # 数据库密码

DB_NAME="mydb"          # 数据库名称

# 备份保存路径

BACKUP_DIR="/home/backup"

DATE=$(date +%F)

FILENAME="${DB_NAME}_${DATE}.sql"

TARFILE="${FILENAME}.tar.gz"

# 创建备份目录(如果不存在)

mkdir -p "$BACKUP_DIR"

# 开始备份

echo "[$(date)] 开始备份数据库 $DB_NAME ..."

mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME > "$BACKUP_DIR/$FILENAME"

# 压缩备份

tar -czf "$BACKUP_DIR/$TARFILE" -C "$BACKUP_DIR" "$FILENAME"

rm "$BACKUP_DIR/$FILENAME"

echo "[$(date)] 备份完成:$TARFILE"

# 自动删除7天前的旧备份

find "$BACKUP_DIR" -name "${DB_NAME}_*.tar.gz" -mtime +7 -exec rm {} \;

echo "[$(date)] 清理7天前备份完成"

保存并退出(Ctrl + O → 回车 → Ctrl + X)

五、添加执行权限

bash

chmod +x /home/backup/mysql_backup.sh

六、设置定时任务(Crontab)

让脚本每天凌晨 2 点自动执行:

bash

crontab -e

添加以下一行:

bash

0 2 * * * /home/backup/mysql_backup.sh >> /home/backup/backup.log 2>&1

这表示每天 2 点执行脚本,并把日志写入 backup.log。

七、执行效果示例

进入备份目录:

bash

cd /home/backup

ls -la

你将看到类似这些文件:

pgsql

mydb_2025-05-13.sql.tar.gz

mydb_2025-05-14.sql.tar.gz

mydb_2025-05-15.sql.tar.gz

backup.log

八、小知识点补充 

命令

作用说明

mysqldumpMySQL 官方提供的数据库备份工具

tar -czf压缩文件为 .tar.gz 格式

find -mtime +7查找7天前的文件

crontabLinux 的定时任务工具

九、常见问题解答

Q1:密码会不会泄露?

是明文写入脚本,但文件权限设置好就不会有问题(chmod 700)。如需更安全方式,建议用 .my.cnf 配置隐藏密码。

Q2:能备份所有数据库吗?

可以,将 mysqldump 替换成:

bash

mysqldump -u$DB_USER -p$DB_PASSWORD --all-databases > all_$(date +%F).sql

总结

恭喜你!现在你已经完成了一个自动化数据库备份系统,再也不用担心数据突然丢失啦!

今 日 收 获

  • 熟悉了 mysqldump 用法

  • 学会用 Shell 脚本打包压缩

  • 搞懂了 Linux 的定时任务 cron

  • 实现了自动清理旧文件

原谅来源:https://mp.weixin.qq.com/s/YmbN5q_snqZKd4zGd1_6FQ

[我要纠错]
[编辑:宋聪乔 &发表于江苏]
关键词: 本文 步步 手用 Shell 脚本

来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

点个赞
0
踩一脚
0

您在阅读:用 Shell 脚本实现 MySQL 数据库每日自动备份

Copyright©2013-2025  JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利

苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司

南京思必达教育科技有限公司版权所有   百度统计

最热文章
最新文章
  • 阿里云上云钜惠,云产品享最低成本,有需要联系,
  • 卡尔蔡司镜片优惠店,镜片价格低
  • 苹果原装手机壳