Автоматическая проверка баз MySQL после перезагрузки сервера

Такая проверка мне понадобилась после того, как настроил автоматическую перезагрузку сервера в том случае, когда он 2 минуты не отвечает на запросы. И в любом другом случае, когда осуществляется reboot, что-то может пойти не так, СУБД не завершит вовремя транзакции, активная в момент перезагрузки таблица окажется повреждённой, и любые операции с участием этой таблицы обернутся фэйлом. А чаще всего достаточно mysqlcheck, чтобы вернуть сломанной таблице её нулевые.

Для реализации сабжа достаточно залогиниться root-ом (в общем случае) по ssh и выполнить:

crontab -e

Для самых маленьких: если откроется редактор vim (поймёте это по 2-м вопросам, которые зададите сами себе: «как тут что-то написать?», «а как выйти отсюда?»). Наберите на клавиатуре заклинание от vim: :q+Enter, затем выполните EDITOR=nano crontab -e

В редакторе записей crontab добавьте такую:

@reboot sleep 5.5m && mysqlcheck -pPASSWORD --auto-repair --optimize --all-databases > /root/mysqlcheck.log 2>/dev/null

Вместо PASSWORD — ваш root-пароль к MySQL (именно пользователя БД, а не системного). Хранится этот пароль обычно в файле /root/.my.cnf — проверено в bitrixVM, ISPmanager, VestaCP.

В качестве бонуса можете подумать над вопросом, как прислать уведомление в том случае, когда выполнение mysqlcheck недостаточно. К примеру, когда в mysqlcheck.log обнаруживается такое:

Repairing tables
db.table
error : Can't create new tempfile: './db/table.TMD'
status : Operation failed

Давшему ответ на этот вопрос в комментариях, вечная ссылка и упоминание в посте.

Запись опубликована в рубрике Web-мастеринг с метками , . Короткая ссылка для добавления в закладки: Автоматическая проверка баз MySQL после перезагрузки сервера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *