如何定时执行备份_mysql自动备份配置

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

MySQL自动备份可以通过结合系统定时任务(如Linux的cron)和MySQL自带工具(如mysqldump)来实现。核心思路是:写一个备份脚本,再用cron定期调用它。

编写自动备份脚本

在服务器上创建一个shell脚本(例如/root/backup_mysql.sh),内容如下:

  • 指定备份目录、保留天数、数据库名、用户名和密码(建议用配置文件避免明文密码)
  • mysqldump导出SQL文件,加上时间戳命名,例如:mydb_20250520.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_D

IR 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';
  • 只赋予SELECTLOCK 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,否则发邮件告警