Бесплатная миграция IT-инфраструктуры в облако
На главную
61c46507-12c7-4300-a301-bd8bc30c7c19
Инструкции для серверов

Проблемы с базой данных

В статье рассказываем про возможные неполадки в работе базы данных и способы их устранения.

Недоступность базы данных

Подключитесь к серверу по SSH и выполните следующие проверки.

  1. Проверьте, запущена ли служба MySQL:
service mysql status

Пример вывода для запущенной службы:

Running (1)

Если в выводе отсутствует слово running, служба не запущена. В этом случае необходимо попытаться ее запустить:

service mysql start

После проверьте работу сайта.

Если проблема сохраняется, переходите к следующей проверке.

  1. Проверьте состояние дискового пространства.

В первую очередь выполните команду ниже, чтобы просмотреть общий и занятый объем на диске:

df -h

Важно, чтобы доступное пространство было именно на основном разделе. Если пространство исчерпано, необходимо расширить диск или освободить место на нем. Для работы с дисковым пространством рекомендуем использовать утилиты ncdu или du.

Если на диске достаточно свободного места, но проблема сохраняется, проверьте состояние inodes.

Свяжитесь с нами, если вам не удается решить проблему самостоятельно.

Повреждены таблицы БД (Table is marked as crashed)

При возникновении ошибок вида «Warning: Table ... is marked as crashed» необходимо выполнить восстановление таблиц. 

Если на сервере установлен phpMyAdmin, можно выполнить восстановление с его помощью. Для этого перейдите в интерфейс PMA и кликните на нужную базу данных в меню слева. Отметьте в списке те таблицы, которые нужно восстановить (то есть таблицы, имена которых фигурируют в ошибках). В самом низу страницы нажмите на выпадающее меню «С отмеченными» и выберите вариант «Восстановить».

Можно обойтись и без phpMyAdmin, выполнив необходимые действия при подключении по SSH.

Для восстановления одной таблицы выполните команду:

mysqlcheck -r имя_базы имя_таблицы -uroot -p

Для восстановления всех таблиц в базе используйте:

mysqlcheck -r имя_базы -uroot -p

Вы также можете выполнить проверку всех таблиц в базе с помощью команды:

mysqlcheck -r -A -uroot -p

Ошибка 2006: MySQL server has gone away

Ошибка 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

Ошибка 1040: Too many connections

Появление ошибки «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

Ошибка 1292: Incorrect date value

При попытке добавить данные в таблицу 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= отсутствует, необходимо:

  1. В файл /etc/mysql/my.cnf после параметра [mysqld] добавить строку:
sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  1. Выполнить перезагрузку mysql-сервера:
sudo service mysql restart
Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев