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"
<p>mkdir -p $BACKUP_DIR
mysqldump -u$USER -p$PASS --single-transaction $DB_NAME | gzip > $BACKUP_DIR/${DB<em>NAME}</em>${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,否则发邮件告警
