По той или иной причине в случайное время мой веб-хост перезагружает сервер, на котором размещен мой CentOS VPS, и когда это происходит, это часто вызывает сбой одной из моих таблиц MySQL. Таблица обрабатывает сеансы PHP сайтов (сайт Joomla, работающий на PHP).
Сайт получает изрядное количество трафика, поэтому при перезагрузке VPS часто выполняется запись в сессионную таблицу.
Что я могу сделать, чтобы этого не произошло? Может быть, какое-то мягкое завершение работы MySQL, когда сервер получает команду перезагрузки?
Единственное, что я сейчас делаю, - это автоматически восстанавливаю таблицу, когда сервер снова включается.
Измените веб-хостинг, если вы арендуете VPS, не должно быть причин, по которым ваш хост будет случайным образом перезагружать ваш сервер. Обычно, когда вызывается остановка системы, MySQL завершает работу должным образом. Я подозреваю, что ваш провайдер просто дает команду kill, а не завершает работу.
Вы можете переключиться на таблицы InnoDB в своей базе данных или использовать систему баз данных, которая поддерживает полностью ACID-совместимые транзакции; PostgreSQL делает это и может выйти из строя, не разрушая вашу базу данных (ему просто нужно воспроизвести свой журнал, прежде чем он завершит процесс запуска).
Таблицы MySQL по умолчанию: не безопасный. Я даже не уверен, что назвал бы InnoDB безопасным при сбоях, но это настолько близко, насколько вы реально собираетесь получить без переключения на другой продукт, и я предполагаю, что это не вариант для вас.
Вы используете пакет MySQL, который поставляется с CentOS? Если да, то mysqld следует закрыть через /etc/init.d/mysqld сценарий. Что возвращает следующая команда?
sudo chkconfig --list mysqld
Если он "выключен" для каждого уровня запуска, попробуйте запустить
sudo chkconfig on mysqld