При работе с базами данных могут встречаться ошибки. Ниже перечислены частые ошибки и меры по их диагностике и устранению.
- Недоступность базы данных
- Повреждены таблицы БД (Table is marked as crashed)
- Ошибка 2006: MySQL server has gone away
- Ошибка 1040: Too many connections
- Ошибка 1292: Incorrect date value
Недоступность базы данных
Если наблюдается недоступность базы данных, необходимо подключиться к серверу по SSH и выполнить следующие проверки:
- Проверить, запущена ли служба MySQL:
Пример вывода для запущенной службы:
Если в выводе отсутствует слово running, служба не запущена. В этом случае необходимо попытаться ее запустить:
После этого надо проверить работу сайта и сделать следующую проверку, если ошибка сохраняется.
- Проверить состояние дискового пространства.
Просмотреть общий и занятый объем на диске командой:
Доступное пространство должно быть на основном разделе. Если свободное пространство закончилось, необходимо освободить место или перейти на тариф выше. Для работы с дисковым пространством можно использовать утилиты ncdu или du.
Если на диске достаточно свободного места, но ошибка сохраняется, надо проверить состояние inodes.
Если не удается решить ошибку самостоятельно, то нужно обратиться в техническую поддержку.
Повреждены таблицы БД (Table is marked as crashed)
При возникновении ошибок вида "Warning: Table ... is marked as crashed" необходимо выполнить восстановление таблиц.
Если на сервере установлен phpMyAdmin, можно выполнить восстановление с его помощью. Для этого:
- Перейдите в интерфейс PMA.
- Выберите нужную базу данных в меню слева
- Отметьте в списке таблицы, которые нужно восстановить. То есть таблицы, имена которых фигурируют в ошибках.
- В самом низу страницы нажмите на выпадающее меню "С отмеченными" и выбрать вариант "Восстановить".
Без phpMyAdmin можно выполнить необходимые действия при подключении по SSH. Для восстановления одной таблицы нужно выполнить команду:
Для восстановления всех таблиц в базе используется команда:
Также можно выполнить проверку всех таблиц в базе с помощью команды:
Ошибка 2006: MySQL server has gone away
Ошибка MySQL server has gone away означает, что сервер закрыл соединение. Это происходит, как правило, в двух случаях: превышение таймаута ожидания или получение сервером слишком большого пакета.
В обоих случаях для устранения ошибки потребуется внести правки в конфигурационный файл MySQL. Это делается при подключении к серверу по SSH или с помощью веб-консоли в панели управления.
Конфигурационный файл может располагаться по различным путям, например:
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
Чтобы определить, в какой файл необходимо вносить изменения, можно использовать команду вида:
Например:
или:
С ее помощью можно выяснить, в каких файлах прописан нужный параметр, и изменить в них его значение.
Таймаут
Чтобы увеличить таймаут ожидания, необходимо скорректировать значение параметра wait_timeout
Нужно открыть конфигурационный файл с помощью редактора, обязательно указав корректный путь к файлу:
Далее нужно изменить значение параметра wait_timeout на более высокое. Значение указывается в секундах: чтобы увеличить время ожидания до 10 минут, необходимо указать значение 600:
После перезапустить службу MySQL:
Размер пакетов
Скорректировать максимально допустимый размер пакетов можно увеличением параметра max_allowed_packet.
Нужно открыть конфигурационный файл с помощью редактора, обязательно указав корректный путь к файлу:
Дале нужно изменить значение параметра max_allowed_packet на более высокое (значение указывается в мегабайтах):
После перезапустить службу MySQL:
Ошибка 1040: Too many connections
Ошибка "Too many connections" означает, что исчерпан лимит подключений к базе данных. Ошибка связана с медленными запросами, которые выполняются слишком долго (в этом случае требуется оптимизация кода) либо в числе одновременных подключений. В этом случае можно попробовать решить проблему увеличением лимита подключений (параметр max_connections) в конфигурационном файле MySQL.
В пункте выше было описано, как определить расположение файла my.cnf.
Откройте конфигурационный файл с помощью редактора, обязательно указав корректный путь к файлу:
И замените значение параметра на более высокое, например:
max_connections = 200
После перезапустите службу MySQL:
Ошибка 1292: Incorrect date value
При попытке добавить данные в таблицу MySQL без указания даты может выдаваться ошибка:
Из-за этой ошибки может нарушаться работа импорта в 1С.
Для исправления ошибки:
- Откройте файл /etc/mysql/my.cnf:
- В строке, начинающейся с sql-mode=, удалите следующие значения:
NO_ZERO_IN_DATE
NO_ZERO_DATE
STRICT_ALL_TABLES
- Выполните перезагрузку mysql-сервера:
Примечание:
Если строка вида sql-mode= отсутствует, необходимо:
- В файл /etc/mysql/my.cnf после параметра [mysqld] добавить строку:
- Выполнить перезагрузку mysql-сервера: