Ошибка «Error establishing a database connection» или «Connection refused» означает, что приложение не может подключиться к MySQL/MariaDB. Проверьте статус сервиса, учётные данные и ресурсы сервера.
Применимо к:
✔ VPS
✔ Выделенные серверы
✔ MySQL, MariaDB
✔ Linux
systemctl status mysql
Или для MariaDB:
systemctl status mariadb
Если сервис остановлен, запустите:
systemctl start mysql
ss -tlnp | grep 3306
Если порт не слушается, MySQL не запущен или настроен на другой порт/сокет.
Проверьте сокет:
ls -la /var/run/mysqld/mysqld.sock
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 | Диск заполнен |
Убедитесь, что логин и пароль в конфигурации приложения совпадают с данными в MySQL.
WordPress (wp-config.php):
grep -E "DB_NAME|DB_USER|DB_PASSWORD|DB_HOST" /путь/к/сайту/wp-config.php
Проверьте подключение вручную:
mysql -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ИМЯ_БАЗЫ
Если получаете Access denied, пароль или имя пользователя неверны.
MySQL не запустится при нехватке места или памяти:
df -h
free -m
Если диск заполнен, освободите место (очистите логи, бинарные логи MySQL):
mysql -e "PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY);"
Проверьте текущее количество подключений:
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
Если в логах ошибки о повреждённых таблицах:
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