Перейти к содержимому

Сайт не подключается к базе - причины по убыванию частоты

Сайт отвечает ошибкой подключения к базе данных. Разбираем причины по убыванию частоты: почти все они про саму базу, а не про сайт.

С чего начать

Проверяем, жива ли служба базы:

Окно терминала
systemctl status mysqld # или mariadb, в зависимости от сборки
mysqladmin ping -u root -p # ответ mysqld is alive означает, что база отвечает
journalctl -u mysqld -n 50 # последние строки журнала: причина остановки видна здесь

Ошибка подключения почти всегда означает, что отвечать некому. Служба базы либо остановлена, либо не поднялась после перезагрузки, и журнал сразу называет причину.

Подключаемся теми же данными, что и сайт:

Окно терминала
grep -A6 "'connections'" /home/site/public_html/bitrix/.settings.php
mysql -h 127.0.0.1 -u site_user -p site_base -e 'SELECT 1'
# «No such file or directory» - это про сокет: сайт ищет его не там, где база его создала

Сообщение о ненайденном файле относится к сокету, а не к базе данных. Адрес localhost заставляет искать сокет по пути из настроек, а 127.0.0.1 идёт по сети, и это разные способы соединения.

Смотрим место и пределы:

Окно терминала
df -h /var/lib/mysql # переполненный диск роняет базу без предупреждения
mysql -e "SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';"
# приблизившееся к пределу число соединений даёт отказы в часы нагрузки

Переполненный диск и упёршийся предел соединений выглядят одинаково со стороны сайта. Оба дают отказ в подключении, и различить их можно только на сервере, а не по сообщению на странице.

Причины

  1. Служба базы остановлена примерно 30% случаев

    ПризнакСайт не открывается целиком, включая административную часть.

    ПроверкаСмотрим состояние службы и последние строки её журнала.

    Что делатьЗапускаем службу и разбираем по журналу, почему она остановилась.

  2. Не тот адрес или сокет в настройках примерно 25% случаев

    ПризнакОшибка про ненайденный файл при живой и отвечающей базе.

    ПроверкаСравниваем адрес в настройках сайта с тем, как база принимает соединения.

    Что делатьПриводим адрес к одному виду: сетевой адрес или путь к сокету явно.

  3. Кончилось место на диске примерно 20% случаев

    ПризнакБаза работала и упала сама, без обновлений и правок настроек.

    ПроверкаСмотрим свободное место на разделе с данными базы и в журналах.

    Что делатьОсвобождаем место, чистим старые журналы и добавляем оповещение о заполнении.

  4. Упёрлись в предел соединений примерно 15% случаев

    ПризнакОтказы приходят в часы нагрузки, а в остальное время сайт работает.

    ПроверкаСравниваем число текущих соединений с настроенным пределом.

    Что делатьПоднимаем предел по возможностям памяти и убираем долгие запросы, держащие соединения.

  5. Неверные учётные данные после переноса примерно 10% случаев

    ПризнакОшибка появилась ровно после переезда или восстановления копии.

    ПроверкаПробуем подключиться в консоли теми же логином и паролем, что в настройках.

    Что делатьЗаводим пользователя базы заново и приводим настройки сайта в соответствие.

Частые вопросы

Почему сайт не открывается даже в административной части?

Платформа поднимает соединение с базой до всего остального. Без него не работает вообще ничего.

Чем localhost отличается от 127.0.0.1?

Первый идёт через файл сокета, второй - по сети. При неверном пути к сокету помогает именно второй.

Как узнать, что база упала из-за диска?

По журналу службы: там прямо написано про невозможность записи. Свободное место проверяют тем же заходом.

Стоит ли просто поднять предел соединений?

Только вместе с проверкой памяти: каждое соединение её потребляет. Чаще помогает ускорение долгих запросов.

Смежное

Первоисточник