在 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.sh3. 使用 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 配置文件存储凭证: [client]user=your_username
password=your_password 设置 .my.cnf 权限为 600:chmod 600 ~/.my.cnf 将脚本存放路径设为非 Web 可访问目录,防止泄露。
基本上就这些。配合日志记录(可重定向输出到日志文件),就能实现稳定可靠的 MySQL 自动备份机制。
