Автоматическая проверка баз 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
Давшему ответ на этот вопрос в комментариях, вечная ссылка и упоминание в посте.
Добавить комментарий