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

来源:这里教程网 时间:2026-02-28 20:31:40 作者:

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

不复杂但容易忽略。

相关推荐