MySQL自动化备份需定时执行导出、压缩、清理三步:用mysqldump加--single-transaction导出单库,gzip压缩并按日期命名文件;通过find -mtime +7清理7天前备份;crontab每天2点执行,日志记录便于排查;多库备份推荐配置分离,密码存于~/.my.cnf更安全。

MySQL 可以通过 Shell 脚本配合 mysqldump 命令实现自动化备份,核心是定时执行导出 + 压缩 + 清理旧备份三步操作。
基础备份脚本(单库 + 压缩)
以下是一个实用的备份脚本示例(保存为 backup_mysql.sh):
注意:需提前创建备份目录(如 /data/backup/mysql),并赋予脚本可执行权限(chmod +x backup_mysql.sh)
- 使用
mysqldump导出指定数据库(含结构和数据),加上--single-transaction保证 InnoDB 一致性 - 用
gzip实时压缩,节省空间 - 文件名包含日期(
YYYYMMDD_HHMMSS),便于识别和归档
脚本内容:
#!/bin/bash DB_USER="root" DB_PASS="your_password" DB_NAME="myapp" BACKUP_DIR="/data/backup/mysql" DATE=$(date +%Y%m%d_%H%M%S)mkdir -p $BACKUP_DIR mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers $DB_NAME | gzip > $BACKUP_DIR/${DBNAME}$DATE.sql.gz
增强版:自动清理过期备份
生产环境建议保留最近 7 天备份,避免磁盘占满。在上述脚本末尾追加:
# 删除 7 天前的备份文件
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete
说明:-mtime +7 表示修改时间超过 7 天的文件;若想按文件名中的日期判断(更精确),可用 awk 或 date 解析,但对大多数场景,find -mtime 已足够可靠。
定时执行:用 crontab 每天凌晨 2 点备份
运行 crontab -e,添加一行:
0 2 * * * /path/to/backup_mysql.sh >> /var/log/mysql_backup.log 2>&1
说明:
-
0 2 * * *表示每天 2:00 执行 -
>>将标准输出和错误日志追加到日志文件,方便排查失败原因(如密码错误、磁盘满、权限不足) - 确保执行用户(如
root或mysql)有读库权限和写入备份目录的权限
多库备份与配置分离(推荐进阶用法)
当需要备份多个库,或希望密码不硬编码在脚本中,可:
- 把数据库列表写入配置文件(如
db_list.conf),每行一个库名 - 使用 MySQL 配置文件
~/.my.cnf存放认证信息(比明文密码更安全):
[client] user = root password = your_password
然后脚本中直接调用 mysqldump --defaults-file=~/.my.cnf ...,无需再传 -u -p。
不复杂但容易忽略










