Восстановление (repair) баз mysql

Сегодня ночью случилась беда, переполнился партиция /var на которой находились базы mysql.

После того как я почистил /var сервер продолжил работу в штатном режиме, кроме одной проблемы перестала работать сортировка в mysql таблицах. То есть была нарушена структура таблиц mysql. Я с подобным уже сталкивался, для восстановления необходимо перейти в однопользовательский режим и выполнить fsck. Но ехать к серверу не было ни желания, ни времени и я решил воспользоваться возможностями mysqlcheck.

Так как у меня была одна очень большая mysql база хранящая логи apache (HTTPD_LOGS), то использовать ключ —all-databases не хотелось (слишком долго). Пришлось написать коротенький скрипт:

#!/bin/sh
p="root_password_mysql"
echo "show databases;" | mysql -u root --password="$p" | grep -v "^Database" \
| grep -v "HTTPD_LOGS" \
| awk -v p="$p" '{system ("mysqlcheck -u root --password=\""p"\" -e --auto-repair --databases "$0)}' \
| grep -v "OK"

Затем перезагрузил mysql-server и на всякий случай прогнал скрипт еще раз.

Все, сортировка заработала. Но надо все таки съездить к серверу и отчекать файловую систему.

P.S. я еще раз убеждаюсь в могуществе awk, если интересуют другие примеры можно глянуть тут.

Leave a Reply