如何定时执行备份_mysql自动备份配置

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

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,否则发邮件告警

相关推荐