В статье рассказываем про возможные неполадки в работе базы данных и способы их устранения.
Подключитесь к серверу по SSH и выполните следующие проверки.
service mysql status
Пример вывода для запущенной службы:
Если в выводе отсутствует слово running, служба не запущена. В этом случае необходимо попытаться ее запустить:
service mysql start
После проверьте работу сайта.
Если проблема сохраняется, переходите к следующей проверке.
В первую очередь выполните команду ниже, чтобы просмотреть общий и занятый объем на диске:
df -h
Важно, чтобы доступное пространство было именно на основном разделе. Если пространство исчерпано, необходимо расширить диск или освободить место на нем. Для работы с дисковым пространством рекомендуем использовать утилиты ncdu или du.
Если на диске достаточно свободного места, но проблема сохраняется, проверьте состояние inodes.
Свяжитесь с нами, если вам не удается решить проблему самостоятельно.
При возникновении ошибок вида «Warning: Table ... is marked as crashed» необходимо выполнить восстановление таблиц.
Если на сервере установлен phpMyAdmin, можно выполнить восстановление с его помощью. Для этого перейдите в интерфейс PMA и кликните на нужную базу данных в меню слева. Отметьте в списке те таблицы, которые нужно восстановить (то есть таблицы, имена которых фигурируют в ошибках). В самом низу страницы нажмите на выпадающее меню «С отмеченными» и выберите вариант «Восстановить».
Можно обойтись и без phpMyAdmin, выполнив необходимые действия при подключении по SSH.
Для восстановления одной таблицы выполните команду:
mysqlcheck -r имя_базы имя_таблицы -uroot -p
Для восстановления всех таблиц в базе используйте:
mysqlcheck -r имя_базы -uroot -p
Вы также можете выполнить проверку всех таблиц в базе с помощью команды:
mysqlcheck -r -A -uroot -p
Ошибка MySQL server has gone away означает, что сервер закрыл соединение, что происходит, как правило, в двух случаях: превышение таймаута ожидания или получение сервером слишком большого пакета.
В обоих случаях для решения проблемы потребуется внести правки в конфигурационный файл MySQL. Это можно сделать при подключении к серверу по SSH или с помощью веб-консоли в панели управления.
Конфигурационный файл может располагаться по различным путям, например:
/etc/my.cnf
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
Чтобы определить, в какой файл необходимо вносить изменения, можно использовать команду вида:
grep -Rl 'имя_параметра' /etc/*
Например:
grep -Rl 'wait_timeout' /etc/*
grep -Rl 'max_allowed_packet' /etc/*
С ее помощью можно выяснить, в каких файлах прописан интересующий нас параметр, и изменить в них его значение.
Чтобы увеличить таймаут ожидания, необходимо скорректировать значение параметра wait_timeout
.
Откройте конфигурационный файл с помощью редактора (укажите корректный путь к файлу):
nano /etc/mysql/my.cnf
Измените значение параметра wait_timeout
на более высокое. Значение указывается в секундах, т.е. чтобы увеличить время ожидания, например, до 10 минут, необходимо указать 600:
wait_timeout = 600
После перезапустите службу MySQL. В Debian/Ubuntu:
service mysql restart
В CentOS:
service mysqld restart
В этом случае можно скорректировать максимально допустимый размер пакетов, увеличив параметр max_allowed_packet
.
Откройте файл конфигурации (укажите корректный путь к файлу):
nano /etc/mysql/my.cnf
Измените значение параметра max_allowed_packet
на более высокое (значение указывается в мегабайтах):
max_allowed_packet = 64M
И перезапустите службу:
В Debian / Ubuntu:
service mysql restart
В CentOS:
service mysqld restart
Появление ошибки «Too many connections» говорит о том, что исчерпан лимит подключений к базе данных. Как правило, проблема либо в медленных запросах, которые выполняются слишком долго (в этом случае требуется оптимизация кода), либо в числе одновременных подключений. В этом случае можно попробовать решить проблему увеличением лимита подключений (параметр max_connections
) в конфигурационном файле MySQL.
В пункте выше было описано, как определить расположение файла my.cnf
.
После откройте файл в редакторе, указав корректный путь:
nano /etc/mysql/my.cnf
И замените значение параметра на более высокое, например:
max_connections = 200
После перезапустите службу:
В Debian / Ubuntu:
service mysql restart
В CentOS:
service mysqld restart
При попытке добавить данные в таблицу MySQL без указания даты может выдаваться ошибка:
ERROR 1292 (22007): Incorrect date value: '0000-00-00' for column 'columnname' at row 1
Из-за этой ошибки может нарушаться работа импорта в 1С.
Для решения проблемы необходимо:
1. Открыть файл /etc/mysql/my.cnf
:
nano /etc/mysql/my.cnf
2. В строке, начинающейся с sql-mode=
, удалить следующие значения:
NO_ZERO_IN_DATE
NO_ZERO_DATE
STRICT_ALL_TABLES
3. Выполнить перезагрузку mysql-сервера:
sudo service mysql restart
Примечание:
Если строка вида sql-mode=
отсутствует, необходимо:
/etc/mysql/my.cnf
после параметра [mysqld]
добавить строку:sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sudo service mysql restart