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_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
不要用root账号做自动备份,应新建权限受限的用户:
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调用。
运行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 屏蔽标准输出和错误,如需日志可改为重定向到文件自动备份容易“看似运行实则失败”,务必验证:
grep CRON /var/log/syslog(Ubuntu)或/var/log/cron(CentOS)