Page tree

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

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

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

service mysql status

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

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

service mysql start

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

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

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

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

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"

2. Выполнить перезагрузку mysql-сервера:

sudo service mysql restart
  • No labels