0 Регистрация Вход

Ошибка соединения с базой данных — диагностика

12.03.2026
Сложность
мин.

Резюме

Ошибка «Error establishing a database connection» или «Connection refused» означает, что приложение не может подключиться к MySQL/MariaDB. Проверьте статус сервиса, учётные данные и ресурсы сервера.

Применимо к:
✔ VPS
✔ Выделенные серверы
✔ MySQL, MariaDB
✔ Linux

Шаг 1: проверьте статус MySQL/MariaDB

systemctl status mysql

Или для MariaDB:

systemctl status mariadb

Если сервис остановлен, запустите:

systemctl start mysql

Шаг 2: проверьте, слушает ли MySQL порт

ss -tlnp | grep 3306

Если порт не слушается, MySQL не запущен или настроен на другой порт/сокет.

Проверьте сокет:

ls -la /var/run/mysqld/mysqld.sock

Шаг 3: проверьте логи MySQL

tail -50 /var/log/mysql/error.log

Или:

journalctl -u mysql --no-pager -n 50

Частые ошибки в логах:

ОшибкаПричина
InnoDB: Unable to lock ./ibdata1Предыдущий процесс MySQL не завершился
Too many connectionsПревышен лимит подключений
Table is marked as crashedПовреждена таблица
No space left on deviceДиск заполнен

Шаг 4: проверьте учётные данные

Убедитесь, что логин и пароль в конфигурации приложения совпадают с данными в MySQL.

WordPress (wp-config.php):

grep -E "DB_NAME|DB_USER|DB_PASSWORD|DB_HOST" /путь/к/сайту/wp-config.php

Проверьте подключение вручную:

mysql -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ИМЯ_БАЗЫ

Если получаете Access denied, пароль или имя пользователя неверны.

Шаг 5: проверьте диск и память

MySQL не запустится при нехватке места или памяти:

df -h
free -m

Если диск заполнен, освободите место (очистите логи, бинарные логи MySQL):

mysql -e "PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY);"

Шаг 6: превышен лимит подключений

Проверьте текущее количество подключений:

mysql -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -e "SHOW VARIABLES LIKE 'max_connections';"

Если Threads_connected близко к max_connections, увеличьте лимит в /etc/mysql/my.cnf:

max_connections = 200
systemctl restart mysql

Шаг 7: восстановление повреждённых таблиц

Если в логах ошибки о повреждённых таблицах:

mysqlcheck -u root -p --auto-repair ИМЯ_БАЗЫ

Для всех баз:

mysqlcheck -u root -p --auto-repair --all-databases

Проверка результата

mysql -u root -p -e "SELECT 1;"

Ожидаемый результат: таблица с числом 1. Откройте сайт в браузере и убедитесь, что ошибка пропала.

Если MySQL не запускается после всех проверок или данные повреждены, откройте тикет в техническую поддержку. Укажите:
- вывод systemctl status mysql
- последние 50 строк /var/log/mysql/error.log
- вывод df -h и free -m
Были ли сведения полезными?
 
Продолжая использовать этот сайт и пользуясь нашими услугами, Вы соглашаетесь с Правилами и условиями веб-сайта и использованием файлов cookie на нашем веб-сайте. Также ознакомьтесь с нашей Политикой конфиденциальности, согласно которой, в заявленной степени, Вы соглашаетесь на обработку Ваших персональных данных.