通过shell脚本结合crontab实现mysql自动备份,首先创建包含备份配置的脚本,使用mysqldump导出数据并用gzip压缩,配合date命令生成时间戳文件名;接着设置脚本执行权限,并通过crontab定时运行,如每天凌晨2点执行;为防止磁盘溢出,在脚本中加入find命令清理7天前的旧备份;安全方面推荐将数据库凭证存于~/.my.cnf并设权限600,避免密码明文泄露;最后将脚本置于非Web访问路径,确保备份过程安全可靠。

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


