MySQL数据库存储着业务核心数据,定期备份是数据安全的重要保障,手动执行备份操作不仅繁琐还容易出现遗忘的情况,通过crontab配置定时任务可以实现MySQL自动备份,大幅降低人工成本。

备份前准备
首先确认服务器已经安装MySQL客户端工具,mysqldump是MySQL自带的备份工具,通常随MySQL服务一起安装,可通过以下命令检查是否可用:
# 检查mysqldump是否可用 mysqldump --version
如果提示命令不存在,需要先安装MySQL客户端,不同系统的安装命令如下:
- CentOS系统:yum install mysql -y
- Ubuntu系统:apt-get install mysql-client -y
同时需要准备一个存放备份文件的目录,建议单独划分存储区域,避免占用系统盘空间:
# 创建备份目录 mkdir -p /data/mysql_backup # 设置目录权限 chmod 755 /data/mysql_backup
编写MySQL备份脚本
备份脚本需要包含数据库连接信息、备份命令、备份文件命名逻辑,同时可以添加备份文件压缩和过期文件清理功能,减少存储空间占用。
以下是一个完整的备份脚本示例,替换其中的数据库信息为你自己的实际配置:
#!/bin/bash
# MySQL连接配置
DB_USER="backup_user"
DB_PASS="backup_password"
DB_HOST="localhost"
DB_PORT="3306"
# 需要备份的数据库名,多个数据库用空格分隔
DB_NAMES="test_db1 test_db2"
# 备份文件存放目录
BACKUP_DIR="/data/mysql_backup"
# 备份文件保留天数,超过该天数的文件会被删除
KEEP_DAYS=7
# 当前时间,用于备份文件命名
CURRENT_TIME=$(date +"%Y%m%d_%H%M%S")
# 日志文件路径
LOG_FILE="${BACKUP_DIR}/backup_log_${CURRENT_TIME}.log"
# 遍历需要备份的数据库
for DB_NAME in ${DB_NAMES}
do
echo "开始备份数据库 ${DB_NAME},时间:$(date)" >> ${LOG_FILE}
# 备份命令,使用mysqldump导出数据,同时压缩备份文件
mysqldump -h${DB_HOST} -P${DB_PORT} -u${DB_USER} -p${DB_PASS} --single-transaction --routines --events ${DB_NAME} | gzip > ${BACKUP_DIR}/${DB_NAME}_${CURRENT_TIME}.sql.gz
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "数据库 ${DB_NAME} 备份成功,文件:${DB_NAME}_${CURRENT_TIME}.sql.gz" >> ${LOG_FILE}
else
echo "数据库 ${DB_NAME} 备份失败,请检查配置" >> ${LOG_FILE}
fi
done
# 清理超过保留天数的备份文件
find ${BACKUP_DIR} -name "*.sql.gz" -mtime +${KEEP_DAYS} -exec rm -f {} ;
find ${BACKUP_DIR} -name "backup_log_*.log" -mtime +${KEEP_DAYS} -exec rm -f {} ;
echo "过期备份文件清理完成,时间:$(date)" >> ${LOG_FILE}
脚本中的参数说明:
--single-transaction:保证备份过程中数据一致性,适合InnoDB引擎--routines:备份存储过程和函数--events:备份事件调度器配置gzip:压缩备份文件,减少存储空间占用
保存脚本为/data/mysql_backup/backup_mysql.sh,然后赋予执行权限:
chmod +x /data/mysql_backup/backup_mysql.sh
先手动执行一次脚本,测试备份是否正常:
/data/mysql_backup/backup_mysql.sh
执行完成后到备份目录查看是否生成了.sql.gz后缀的压缩备份文件,同时检查日志文件确认备份过程没有报错。
配置crontab定时任务
Linux系统的crontab服务可以用来配置定时执行的任务,首先确认crontab服务是否运行:
# 检查crontab服务状态 systemctl status crond # 如果未运行,启动服务 systemctl start crond # 设置开机自启 systemctl enable crond
编辑当前用户的crontab配置:
crontab -e
在打开的配置文件中添加以下定时规则,这里配置为每天凌晨2点执行备份脚本:
0 2 * * * /data/mysql_backup/backup_mysql.sh
crontab的时间格式说明:
| 字段位置 | 含义 | 取值范围 |
|---|---|---|
| 第一个字段 | 分钟 | 0-59 |
| 第二个字段 | 小时 | 0-23 |
| 第三个字段 | 日期 | 1-31 |
| 第四个字段 | 月份 | 1-12 |
| 第五个字段 | 星期 | 0-7(0和7都代表周日) |
如果需要配置更复杂的定时规则,可以参考以下示例:
- 每6小时执行一次:0 */6 * * *
- 每周一凌晨3点执行:0 3 * * 1
- 每月1号凌晨4点执行:0 4 1 * *
保存crontab配置后,可以通过以下命令查看当前用户的定时任务列表:
crontab -l
备份恢复测试
备份完成后需要定期测试备份文件是否可以正常恢复,避免备份文件损坏导致无法恢复数据。
恢复备份的命令如下,替换文件名称为你实际的备份文件路径:
# 解压备份文件 gunzip test_db1_20240520_020000.sql.gz # 恢复数据到数据库 mysql -u数据库用户名 -p数据库密码 数据库名 < test_db1_20240520_020000.sql
如果是恢复整个数据库,需要确保目标数据库已经存在,或者备份文件中包含创建数据库的语句。
常见问题排查
如果定时备份没有正常执行,可以按照以下步骤排查问题:
- 检查crontab服务是否正常运行,查看服务状态和日志
- 检查备份脚本是否有执行权限,手动执行脚本确认是否可以正常备份
- 查看crontab的执行日志,通常路径为
/var/log/cron,确认任务是否被触发 - 检查MySQL用户权限,备份用户需要有对应数据库的SELECT、LOCK TABLES等权限
- 确认备份目录磁盘空间是否充足,避免备份失败
注意:生产环境的备份策略建议采用全量备份加增量备份结合的方式,同时备份文件需要同步到其他存储节点,避免单点故障导致备份文件丢失。
通过以上步骤就可以完成MySQL自动备份的配置,结合crontab定时任务实现无人值守的数据库备份,有效保障数据安全。
MySQL自动备份crontab定时任务数据库备份mysqldump修改时间:2026-07-17 02:12:33