MySQL自动备份需结合cron定时任务与mysqldump工具:编写含备份路径、压缩、时间戳命名及旧文件清理的shell脚本;创建最小权限备份账号并安全存储密码;配置crontab每日执行;务必验证备份有效性及添加校验告警。

MySQL自动备份可以通过结合系统定时任务(如Linux的cron)和MySQL自带工具(如mysqldump)来实现。核心思路是:写一个备份脚本,再用cron定期调用它。
编写自动备份脚本
在服务器上创建一个shell脚本(例如/root/backup_mysql.sh),内容如下:
- 指定备份目录、保留天数、数据库名、用户名和密码(建议用配置文件避免明文密码)
- 用
mysqldump导出SQL文件,加上时间戳命名,例如:mydb_20240520.sql.gz - 用
gzip压缩节省空间 - 用
find命令自动清理超过设定天数的旧备份
示例脚本片段:
#!/bin/bash BACKUP_DIR="/data/backup/mysql" DATE=$(date +%Y%m%d) DB_NAME="myapp" USER="backup_user" PASS="your_secure_password"mkdir -p $BACKUP_DIR mysqldump -u$USER -p$PASS --single-transaction $DB_NAME | gzip > $BACKUP_DIR/${DBNAME}${DATE}.sql.gz find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
配置MySQL专用备份账号(推荐)
不要用root账号做自动备份,应新建权限受限的用户:
- 登录MySQL,执行:
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'strong_pass'; - 只赋予
SELECT和LOCK TABLES权限:GRANT SELECT, LOCK TABLES ON myapp.* TO 'backup_user'@'localhost'; - 刷新权限:
FLUSH PRIVILEGES;
更安全的方式是把密码存到~/.my.cnf(权限设为600),脚本中直接用mysqldump --defaults-extra-file=/root/.my.cnf调用。
用cron设置定时任务
运行crontab -e,添加一行(例如每天凌晨2点执行):
0 2 * * * /bin/bash /root/backup_mysql.sh >/dev/null 2>&1
-
0 2 * * *表示每天2:00执行 -
/bin/bash显式调用bash,避免环境变量问题 -
>/dev/null 2>&1屏蔽标准输出和错误,如需日志可改为重定向到文件
验证与监控(不能跳过)
自动备份容易“看似运行实则失败”,务必验证:
- 手动运行一次脚本,检查生成的.gz文件能否正常解压并包含有效SQL
- 查看cron日志:
grep CRON /var/log/syslog(Ubuntu)或/var/log/cron(CentOS) - 加简单校验逻辑到脚本中,比如检查输出文件大小是否大于1KB,否则发邮件告警










