Назад | Перейти на главную страницу

Почему резервная копия mysql увеличивается, если таблица разбита?

Я использую этот сценарий резервного копирования на моем сервере 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