Одной из ярких причин возникновения ошибок в базе данных может послужить неправильная остановка сервера MySQL. Как это обычно бывает, сбой в электропитании сервера, либо иные причины, повлекшие за собой банальное отключение машины, либо перезагрузку. Иногда, и нередко подобного рода сбои могут повлечь за собой проблемы, которые решаются лишь путем восстановления данных из бэкапа, и это к вопросу для чего нужно делать бэкапы. Наличие ошибок в базе данных может проявиться не сразу, однако если они есть, то вы их рано или поздно обязательно заметите. Проблемы, как правило, проявляются в виде ошибок после запросов к базе, либо база начинает уходить в раздумье на не свойственное для этого время.
Давайте посмотрим, что можно предпринять первым делом, чтобы попытаться исправить ситуацию. Утилита mysqlcheck как правило устанавливается по умолчанию с сервером MySQL может быть использована для проверки баз данных на ошибки. Рассмотрим пример ее использования.
Использование утилиты mysqlcheck
# mysqlcheck -u root -p --optimize --auto-repair --all-databases
Назначение параметров:
--optimize – Оптимизируем все базы. --auto-repair – Ремонтируем все базы. --all-databases – Проверяем ошибки у всех баз.
Если база данных больших размеров, а вам нужно срочно поправить определенную таблицу, то вы можете запустить проверку определенной таблицы в базе данных.
Проверка отдельной таблицы в базе данных:
# mysqlcheck -r имя_базы имя_таблицы_в_базе -u root -p
Исправление таблиц MyISAM.
Так же существует утилита myisamchk, отличается от предыдущей утилиты тем, что перед её использованием необходимо останавливать сервер баз данных, в то время как mysqlcheck может использоваться при работающем сервере. Рассмотрим пример использования утилиты myisamchk.
Останавливаем сервер MySQL
# service mysqld stop
Анализируем базу данных на наличие ошибок
# myisamchk -s /var/db/mysql/наша_база/*.MYI
Обратите внимание, что путь к базам данных у вас может отличаться, этот момент вам следует так же уточнить. Если есть ошибки, то появиться сообщение подобного вида:
myisamchk: warning: 2 client is using or hasn't closed the table properly MyISAM-table '/var/db/mysql/наша_база/ary_mem.MYI' is usable but should be fixed
Исправляем ошибки с помощью myisamchk
# myisamchk -r /var/db/mysql/наша_база/ary_mem.MYI
Исправляем ошибки по всем таблицам в базе (рекурсивно)
# myisamchk -r /var/db/mysql/наша_база/*.MYI
Процесс исправления ошибок будет сопровождаться подобным выводом сообщений в окне консоли:
- Fixing index 1 - Fixing index 2 - Fixing index 3
После того как ошибки исправлены, можно запустить сервер MySQL, чтобы убедиться что всё в порядке.
Запуск сервера MySQL
# service mysqld start
Хотелось бы отметить один момент, что команды остановки и запуска сервера MySQL, а так же пути расположения баз данных на вашем сервере могут отличаться, поэтому вам так же следует эти моменты учесть.