#Что означает ошибка
Error establishing a database connection
WordPress хранит все записи, страницы и настройки в базе MySQL или MariaDB. При каждом открытии страницы он подключается к ней по данным из файла wp-config.php. Если подключение не удалось, вместо сайта показывается белая страница с этим сообщением. Сам код сайта при этом, как правило, цел — проблема в связке «WordPress ↔ база».
Если ошибка появилась внезапно на работавшем сайте, сначала проверьте самое простое: не истёк ли тариф хостинга, не переезжал ли сайт, не менялся ли пароль БД. Если ошибка возникла сразу после установки или переноса — почти наверняка опечатка в wp-config.php. Если она видна только в админке (wp-admin), а не на сайте, возможно, повреждены таблицы — об этом ниже.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Неверные данные подключенияВ wp-config.php указаны имя базы, пользователь, пароль или хост, которых не существует или которые изменились после переноса. | Ошибка видна сразу после установки, переноса, смены пароля БД. | Сверьте DB_NAME, DB_USER, DB_PASSWORD, DB_HOST с данными из панели хостинга. |
| MySQL остановлен или недоступенСервер БД упал из-за нехватки памяти, переполнения диска или перезапуска сервера. | Не открываются и другие сайты на сервере, systemctl status mysql показывает failed. | Освободите место и память, запустите службу, посмотрите журнал ошибок. |
| Повреждена база данныхПосле аварийного отключения таблицы MyISAM или InnoDB остались в неконсистентном состоянии. | В админке появляется сообщение о необходимости ремонта, в логе MySQL — crashed table. | Включите WP_ALLOW_REPAIR и запустите ремонт, либо выполните mysqlcheck --repair. |
Исчерпан лимит соединенийПри всплеске посещений или атаке боты занимают все слоты max_connections, новые соединения отклоняются. | В логе MySQL — Too many connections, ошибка то появляется, то исчезает. | Увеличьте лимит, включите кэш-плагин, ограничьте ботов. |
#Пошаговое решение
- Проверьте, доступен ли сам сервер БДСначала проверьте доступность базы: на своём сервере
systemctl status mysqlилиmariadb, на хостинге — статус услуги в панели и обращения поддержки. Если служба запущена, но WordPress не подключается, выясните точный код MySQL из закрытого журнала; не перезапускайте БД, обслуживающую другие сайты. - Проверьте данные в wp-config.phpОткройте защищённый
wp-config.phpWordPress и сверьтеDB_NAME,DB_USER,DB_HOST, не раскрывая пароль. Если PHP недавно меняли, проверьте расширениеmysqli/pdo_mysqlименно веб-версии. Не создавайте новую пустую базу вместо существующей. - Проверьте подключение вручнуюНа сервере сайта попробуйте
mysql -h реальный_хост -u реальный_пользователь -p имя_базы -e "SELECT 1". Успех подтверждает сетевой доступ и учётную запись; если есть 1045, проверьте права и пароль, если 2002/2003 — адрес и сокет/порт. - Посмотрите место на диске и памятьВ терминале сервера проверьте
df -h,df -iиfree -h; найдите события OOM в журнале ядра. Если БД завершилась из-за нехватки памяти или диска, восстановите ресурсы безопасным способом и только затем снова попробуйте подключиться. - Запустите ремонт таблицЕсли в журнале явно указана повреждённая таблица, перед любым ремонтом сделайте дамп и определите движок таблиц. Для InnoDB
mysqlcheck --auto-repairне обеспечивает универсального восстановления; используйте подходящий способ восстановления из копии. Не включайте публичный режим восстановления WordPress без защиты. - Увеличьте лимит соединений, если ошибка плавающаяПри плавающей ошибке посмотрите журналы MySQL на
Too many connectionsи счётчикиThreads_connected,Max_used_connections. Вместо немедленного повышения max_connections найдите всплеск запросов, неосвобождённые соединения и доступную память; проверьте результат под реальной нагрузкой.
#Диагностика на сервере
Проверьте логи — они покажут точную причину. Если MySQL не стартует после сбоя, часто виноваты повреждённые журналы InnoDB; в таком случае сначала сделайте копию каталога /var/lib/mysql и лишь потом пробуйте восстановление.
sudo systemctl status mysqlsudo journalctl -u mysql -n 50 --no-pagersudo tail -n 50 /var/log/mysql/error.logdf -hfree -m#Проверка и ремонт таблиц
Если подключение возможно, но таблицы повреждены, воспользуйтесь штатной утилитой. Перед ремонтом снимите дамп — это единственная гарантия, что вы не потеряете данные при неудачной операции.
mysqldump -u имя_пользователя -p имя_базы > backup.sql# Создавайте дамп вне публичного каталога, проверяйте его полноту.# Не выполняйте --auto-repair наугад для InnoDB.Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.