MySQL 本身不内置定时备份功能,需要结合操作系统(如 Linux 的
cron)和命令行工具(如
mysqldump)来实现自动备份。核心思路是:写好备份脚本 → 设置定时任务 → 定期执行并保留历史版本。
用 mysqldump 做基础备份
mysqldump是最常用、轻量且可靠的逻辑备份方式,适合中小规模数据库。基本命令如下: 备份单个库:
mysqldump -u用户名 -p密码 --single-transaction 数据库名 > /backup/dbname_$(date +\%F).sql备份多个库:
mysqldump -u用户名 -p密码 --single-transaction --databases db1 db2 > /backup/multi_$(date +\%F).sql备份所有库:
mysqldump -u用户名 -p密码 --single-transaction --all-databases > /backup/all_$(date +\%F).sql
注意:加
--single-transaction可保证 InnoDB 表的一致性快照;避免在命令中明文写密码(有安全风险),建议用
~/.my.cnf配置文件存认证信息。
编写可复用的备份脚本
把备份逻辑封装成 shell 脚本,便于维护和定时调用。例如创建
/opt/scripts/mysql_backup.sh:
#!/bin/bash BACKUP_DIR="/backup/mysql" DATE=$(date +\%Y\%m\%d_\%H\%M) mkdir -p $BACKUP_DIR <h1>使用配置文件中的账号(~/.my.cnf)</h1><p>mysqldump --single-transaction --all-databases | gzip > $BACKUP<em>DIR/full</em>$DATE.sql.gz</p><h1>只保留最近7天的备份</h1><p>find $BACKUP<em>DIR -name "full</em>*.sql.gz" -mtime +7 -delete
给脚本执行权限:
chmod +x /opt/scripts/mysql_backup.sh。确保
~/.my.cnf内容类似:
[client] user = backup_user password = your_secure_password
并设为仅属主可读:
chmod 600 ~/.my.cnf。
用 cron 设置定时任务
编辑 root 或专用用户的 crontab:
sudo crontab -e,添加一行: 每天凌晨2点执行:
0 2 * * * /opt/scripts/mysql_backup.sh每周日3点全备,工作日只备关键库:
0 3 * * 0 /opt/scripts/mysql_backup.sh full和
0 3 * * 1-6 /opt/scripts/mysql_backup.sh critical(需在脚本中判断参数)
保存后 cron 会自动加载。可用
sudo systemctl status cron(Debian/Ubuntu)或
sudo systemctl status crond(CentOS/RHEL)确认服务运行正常。
补充建议:验证与异地保存
自动备份只是第一步,还需保障备份真正可用:
定期手动解压并尝试导入一小部分数据,验证 SQL 文件完整性 把备份文件同步到另一台服务器或对象存储(如 rsync + 阿里云 OSS / AWS S3),防止单点故障 在脚本末尾加入日志记录,例如echo "$(date): Backup done" >> /var/log/mysql_backup.log对大库考虑分库备份或使用
mydumper(支持多线程、更高效)替代 mysqldump
不复杂但容易忽略。
