Linux如何通过Shell脚本自动备份数据库?定时上传云端方法【教程】

秋丽同学_5892

秋丽同学_5892

2026-04-17

391人浏览

原创

mysqldump安全导出压缩需禁用明文密码(用~/.my.cnf配置文件)、加--single-transaction、绝对路径调用命令、重定向stderr日志、定时任务显式声明path、上传oss前校验、按实际时间清理旧备份并确保系统时钟同步。

linux如何通过shell脚本自动备份数据库?定时上传云端方法【教程】

mysqldump 是核心工具,但光靠它导出 SQL 文件远远不够——没压缩会吃光磁盘,没清理会堆积失效备份,没日志根本不知道哪次失败了。直接写个“能跑就行”的脚本,在生产环境撑不过三天。

如何用 mysqldump 安全导出并压缩数据库

明文密码写在命令行里(如 mysqldump -u root -p123456 db_name)会被 ps 看到,也留在 shell 历史中,非常危险。必须改用配置文件方式:

  • 创建 ~/.my.cnf,权限设为 600:
    [client]
    user = backup_user
    password = your_secure_password
    host = localhost
  • 导出时省略用户名密码,只写:mysqldump --databases db1 db2 | gzip > /backup/db_$(date +%Y%m%d_%H%M%S).sql.gz
  • 加 --single-transaction(InnoDB 表)或 --lock-tables=false(避免锁库阻塞业务)
  • 不推荐用 -p 后紧跟密码;也不要用环境变量传密码,mysqldump 不读取 MYSQL_PWD(已弃用且不安全)

crontab 定时执行的几个硬坑

crontab -e 编辑的脚本默认没有用户环境变量(比如 PATH),mysqldump 找不到、gzip 报 command not found 是最常见报错。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载
  • 在 crontab 条目开头显式声明 PATH:PATH=/usr/local/bin:/usr/bin:/bin
  • 所有命令写绝对路径:用 /usr/bin/mysqldump 而不是 mysqldump
  • 重定向 stderr 到日志,否则失败无声:2>> /var/log/mysql-backup.log
  • 示例条目(每天凌晨 2:15 执行):
    15 2 * * * PATH=/usr/local/bin:/usr/bin:/bin /backup/backup.sh >> /var/log/mysql-backup.log 2>&1

上传到阿里云 OSS 的最小可行方案

不用 Python SDK 或复杂封装,ossutil64 命令行工具足够轻量稳定。

  • 先安装:curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash
  • 配置凭据:ossutil64 config -e oss-cn-hangzhou.aliyuncs.com -i your_access_key_id -k your_access_key_secret
  • 上传前确保本地备份文件存在,用 test -f "$file" 判断,避免空文件上传
  • 上传命令加 --update 参数可跳过已存在且大小时间一致的文件,减少重复流量
  • 上传后校验:ossutil64 head oss://your-bucket/$filename | grep "Content-Length",确认非零

自动清理旧备份的关键逻辑

find /backup -name "*.sql.gz" -mtime +7 -delete 看似简洁,但 -mtime +7 指“修改时间超过 7×24 小时”,不是“7 天前的文件”——如果某次备份卡在 23:59,第二天 00:01 才完成,它可能被提前删掉。

  • 更稳妥的做法是按文件名日期解析:find /backup -name "db_????????_*.sql.gz" | while read f; do basename "$f" | grep -q "$(date -d '7 days ago' +%Y%m%d)" || rm "$f"; done
  • 或者用 stat -c '%y %n' /backup/*.sql.gz | sort | head -n -7 | cut -d' ' -f6- | xargs -r rm(按实际修改时间倒序取前 N 个保留)
  • 删除前务必 echo 出要删的文件列表,调试阶段注释掉 rm,确认无误再放开

真正容易被忽略的是时间同步和时区。服务器若未启用 ntpd 或 chronyd,date 命令生成的时间戳会漂移,导致 crontab 时间不准、备份文件名错乱、find -mtime 判定失准。2026 年多数发行版默认启用 chronyd,但老系统或容器环境仍需手动检查:timedatectl status 中的 “System clock synchronized: yes” 必须为 true。

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2023.06.29

2525

3

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2023.08.14

3801

10

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

2023.08.31

2751

3

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.05

907

5

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

2447

5

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

2023.10.16

2467

4

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

2023.10.16

2833

3

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

2023.10.19

2261

3

mdf文件导入数据库的方法
mdf文件导入数据库的方法

mdf文件导入数据库的方法有使用SQL Server Management Studio、使用SQL Server命令行工具、使用SQL Server Integration Services等方法。想了解更多mdf文件导入数据库的方法的相关内容,可以阅读本专题下面的文章。

2023.10.23

2393

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习