mysql如何进行定时备份_mysql自动备份配置方法

MySQL需结合cron与mysqldump实现自动备份:编写含压缩、清理、日志的脚本,配置~/.my.cnf认证,设置定时任务,并建议验证备份、异地保存及大库优化。

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

使用配置文件中的账号(~/.my.cnf)

mysqldump --single-transaction --all-databases | gzip > $BACKUPDIR/full$DATE.sql.gz

只保留最近7天的备份

find $BACKUPDIR -name "full*.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 full0 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

不复杂但容易忽略。