通过Shell脚本结合crontab实现MySQL自动备份,首先创建包含备份配置的脚本,使用mysqldump导出数据并用gzip压缩,配合date命令生成时间戳文件名;接着设置脚本执行权限,并通过crontab定时运行,如每天凌晨2点执行;为防止磁盘溢出,在脚本中加入find命令清理7天前的旧备份;安全方面推荐将数据库凭证存于~/.my.cnf并设权限600,避免密码明文泄露;最后将脚本置于非Web访问路径,确保备份过程安全可靠。
在 MySQL 中实现自动备份,关键是编写脚本并结合系统定时任务来定期执行。这种方式能确保数据安全且无需人工干预。下面介绍如何通过 Shell 脚本和 crontab 实现 MySQL 的自动化备份管理。
编写一个 Shell 脚本(如 mysql_backup.sh),用于导出数据库并保存带时间戳的文件:
#!/bin/bash配置项
USER="your_username" PASS="your_password" HOST="localhost" BACKUPDIR="/path/to/backup/directory" DATE=$(date +"%Y%m%d%H%M%S")
确保备份目录存在
mkdir -p $BACKUP_DIR
获取所有数据库列表(排除系统库可选)
databases=$(mysql -h $HOST -u $USER -p$PASS -e "SHOW DATABASES;" | grep -Ev "(information_s
chema|performance_schema|mysql|sys)")
循环备份每个数据库
for db in $databases; do mysqldump -h $HOST -u $USER -p$PASS --single-transaction --routines --triggers --databases $db | gzip > "$BACKUPDIR/${db}${DATE}.sql.gz" echo "Backup of database '$db' completed at $DATE" done
说明:
赋予脚本可执行权限:
chmod +x /path/to/mysql_backup.sh编辑系统定时任务:
crontab -e添加一行,例如每天凌晨 2 点执行备份:
0 2 * * * /path/to/mysql_backup.sh你也可以按需设置频率,比如每周一次或每小时一次。
在脚本中加入删除 7 天前的备份文件逻辑:
# 删除7天前的备份 find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete这样可以避免磁盘被旧备份占满。
基本上就这些。配合日志记录(可重定向输出到日志文件),就能实现稳定可靠的 MySQL 自动备份机制。