Я использую этот сценарий резервного копирования на моем сервере 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), эта резервная копия создает огромный файл, несколько ГБ.
Как я могу это предотвратить?
Я использую это в сочетании с rsnapshot, который снова создает резервную копию BACKUP_DIR ежечасно, но только постепенно. И если есть такой файл резервной копии amok, он заполнит мой жесткий диск полностью через несколько часов.
Я временно помог себе, добавив следующие строки:
# delete backups > 2GB
find $BACKUP_DIR -size +2000M -exec rm {} \;
возможно, вам стоит подумать об изменении вашего скрипта, чтобы выполнить проверку таблицы перед резервным копированием. (или запланировать проверку через cron на регулярной основе)
myslqlcheck - это собственный инструмент, поставляемый с дистрибутивом mysql, который может анализировать и восстанавливать ваши таблицы. просто взгляните на страницу руководства и посмотрите, какие флаги больше всего подходят для вашей базы данных.
Помимо вашей текущей проблемы с резервным копированием, неплохо запланировать такую задачу и, самое главное, определить причины сбоев ваших таблиц.
Ниже пример использования: проверьте и восстановите все базы данных в вашем экземпляре
mysqlcheck --user=someuser --password=somepassword --all-databases --auto-repair