我在我的 debian squeeze 服务器上使用这个备份脚本来创建所有 mysqltables 的备份:
#!/bin/sh
BACKUP_DIR=/var/backups/mysql/
DATE=$(date +%Y-%m-%d)
for i in /var/lib/mysql/*/; do
dbname=`basename "$i"`
mysqldump "$dbname" | gzip > $BACKUP_DIR/$dbname.sql.gz
done
# delete old backups older than 1 day
find $BACKUP_DIR -atime +1 -exec rm {} \;
现在有时如果一个表被“标记为崩溃”(MyISAM),此备份会创建一个巨大的文件,几 GB。
我怎样才能防止这种情况发生?
我将其与 rsnapshot 结合使用,它会每小时再次备份 BACKUP_DIR,但只是增量备份。如果有这样一个 amok-backupfile,它会在几个小时后填满我的整个硬盘。
我临时给自己加了以下几行:
# delete backups > 2GB
find $BACKUP_DIR -size +2000M -exec rm {} \;
答案1
也许您应该考虑修改您的脚本以便在备份之前执行表检查。(或定期通过 cron 安排检查)
mysql检查是 mysql 发行版附带的本机工具,可以分析和修复您的表。只需查看手册页并查看哪些标志最适合您的数据库。
除了当前的备份问题之外,安排这样的任务也是一个好主意,最重要的是找出表崩溃的原因。
以下是使用示例:检查并修复实例中的所有数据库
mysqlcheck --user=someuser --password=somepassword --all-databases --auto-repair