Перейти к содержимому
Почта Личный кабинет Выбрать тариф

Error establishing a database connection в WordPress: как исправить

Error establishing a database connection в WordPress: как исправить

Ошибка «Error establishing a database connection» в WordPress значит, что сайт не смог подключиться к базе данных MySQL или MariaDB и поэтому не может собрать ни одной страницы: все записи, настройки и пользователи хранятся именно там. Чаще всего виноваты неверные данные доступа в wp-config.php (после переноса сайта или смены пароля), остановленный или перегруженный сервер баз данных и исчерпанные лимиты хостинга. Начните с двух действий: откройте /wp-admin/, где WordPress показывает более подробное сообщение, и сверьте константы DB_NAME, DB_USER, DB_PASSWORD и DB_HOST с данными базы в панели хостинга.

Что означает ошибка и как WordPress ее показывает

При каждом запросе WordPress сначала соединяется с сервером баз данных, а затем выбирает нужную базу. Если любой из этапов срывается, выполнение останавливается: тема, плагины и кеш даже не загружаются. На публичной части сайта выводится только короткий заголовок, а сервер отдает код 500, чтобы поисковые системы не сохранили страницу с ошибкой.

Важно понимать: на фронтенде один и тот же текст появляется по разным причинам. Подробности WordPress выводит в админке, поэтому откройте https://example.com/wp-admin/ и сравните сообщение с таблицей.

Что вы видите Где Что это значит Что делать
Error establishing a database connection Любая страница сайта Не удалось подключиться или выбрать базу, причина не уточняется Открыть /wp-admin/ или временно включить WP_DEBUG
Тот же заголовок и текст «This either means that the username and password information in your wp-config.php file is incorrect…» /wp-admin/ Сервер отклонил логин или пароль либо не отвечает по адресу DB_HOST Проверить DB_USER, DB_PASSWORD, DB_HOST и работу MySQL
Cannot select database /wp-admin/ Логин и пароль верны, но базы с таким именем нет или у пользователя нет прав на нее Проверить DB_NAME, префикс имени и права пользователя
One or more database tables are unavailable. The database may need to be repaired. /wp-admin/ Соединение есть, но части таблиц нет или они повреждены Восстановить таблицы или вернуть бэкап
Could not find site … Searched for table … Мультисайт База доступна, но домен не найден в таблицах сети Проверить DOMAIN_CURRENT_SITE и таблицы wp_site, wp_blogs
Страница установки WordPress Любая страница База пустая или $table_prefix не совпадает с префиксом таблиц Исправить $table_prefix, не устанавливать WordPress заново

Если и в админке только короткий заголовок, временно включите отладку в wp-config.php: define( ‘WP_DEBUG’, true ); и define( ‘WP_DEBUG_DISPLAY’, true );. Тогда над сообщением появится точный ответ сервера, например Access denied for user ‘user_wp’@’localhost’. После диагностики верните значение false, чтобы не показывать технические подробности посетителям. Если же WordPress показывает сообщение «На сайте произошла критическая ошибка», воспользуйтесь инструкцией, как исправить критическую ошибку WordPress.

Быстрая диагностика за пять шагов

Проходите шаги по порядку: каждый сразу отсекает несколько причин.

  1. Прочитайте сообщение в /wp-admin/. Текст из таблицы выше сужает поиск до одной-двух причин.
  2. Проверьте другие сайты и phpMyAdmin на этом хостинге. Если не работает ничего, проблема на уровне сервера баз данных, а не в вашем wp-config.php.
  3. Сверьте wp-config.php с панелью. Имя базы, пользователь и хост должны совпадать посимвольно, вместе с префиксом аккаунта.
  4. Войдите в phpMyAdmin с данными из wp-config.php. Не пускает: неверный логин или пароль. Пускает, но базы нет в списке: у пользователя нет прав на нее.
  5. Проверьте ресурсы и логи. Заполненный диск, исчерпанные inode, перезапуск MySQL из-за нехватки памяти или сообщение Too many connections указывают на лимиты или сбой сервера.
Пошаговая диагностика ошибки Error establishing a database connection в WordPress
Пять шагов, которые обычно показывают причину ошибки

7 причин ошибки и как исправить каждую

1. Неверные данные доступа в wp-config.php

Самый частый сценарий: сайт перенесли к другому хостеру, сменили пароль базы в панели или кто-то отредактировал wp-config.php. Файл лежит в корне сайта рядом с папками wp-admin и wp-content, нужные строки выглядят так:

define( 'DB_NAME', 'user_wp' );
define( 'DB_USER', 'user_wp' );
define( 'DB_PASSWORD', 'your-password' );
define( 'DB_HOST', 'localhost' );
$table_prefix = 'wp_';

Обратите внимание:

  • Во многих панелях хостинга к имени базы и пользователя автоматически добавляется имя аккаунта с подчеркиванием: создав базу wp, вы получите user_wp. После переноса из другой панели префикс почти всегда отличается.
  • Лишние пробелы, типографские кавычки из текстового редактора, обрезанный при копировании пароль.
  • Одинарная кавычка или обратный слеш в пароле: в PHP-строке их нужно экранировать (\’ и \\). Проще задать новый пароль из латинских букв, цифр и дефисов.

Самое надежное решение: задать пользователю базы новый пароль в панели хостинга и прописать его в wp-config.php. По SSH это удобно делать через WP-CLI: команды wp config читают и меняют файл, не подключаясь к базе.

cd /home/user/web/example.com/public_html
wp config get DB_NAME
wp config get DB_HOST
wp config set DB_PASSWORD 'new-password'

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

2. Неверный DB_HOST

На большинстве виртуальных хостингов база работает на том же сервере, поэтому DB_HOST равен localhost. Некоторые провайдеры выносят MySQL на отдельный сервер и указывают его адрес в панели, тогда localhost не сработает. Техническая деталь: для PHP значение localhost означает подключение через Unix-сокет, а 127.0.0.1 через TCP-порт 3306. Если PHP ищет сокет не там, где его создает сервер базы, помогает замена localhost на 127.0.0.1.

Значение DB_HOST Как подключается PHP Когда использовать
localhost Unix-сокет по пути из настроек PHP Типичный вариант для виртуального хостинга и VPS
127.0.0.1 TCP, порт 3306 Сокет недоступен или MySQL принимает только TCP
127.0.0.1:3307 TCP, нестандартный порт На сервере работает второй экземпляр MySQL или MariaDB
localhost:/run/mysqld/mysqld.sock Явно указанный сокет Путь к сокету отличается от стандартного
db.example.net TCP к отдельному серверу Хостер выдал отдельный адрес сервера баз данных

После замены localhost на 127.0.0.1 иногда появляется Access denied: MySQL различает пользователей ‘user’@’localhost’ и ‘user’@’127.0.0.1’, и второй записи может просто не быть.

3. Базы нет или у пользователя нет прав

Сообщение Cannot select database означает, что логин и пароль приняты, но база с именем DB_NAME недоступна. Ее не создали или не импортировали после переноса, в имени ошибка, либо пользователь не привязан к базе. В панели хостинга пользователя часто создают вместе с базой, так что проверьте в разделе баз данных, что DB_NAME и DB_USER относятся к одной записи. На VPS права проверяет и выдает администратор:

sudo mysql -e "SHOW DATABASES;"
sudo mysql -e "SHOW GRANTS FOR 'user_wp'@'localhost';"
sudo mysql -e "GRANT ALL PRIVILEGES ON user_wp.* TO 'user_wp'@'localhost';"

4. Сервер MySQL или MariaDB остановился

Если не работают все сайты аккаунта, а phpMyAdmin тоже не открывается, служба базы данных остановлена. На виртуальном хостинге это вопрос к поддержке. На VPS проверьте службу и причину остановки:

sudo systemctl status mariadb        # или mysql
sudo journalctl -u mariadb -n 50 --no-pager
sudo dmesg -T | grep -i -E "out of memory|killed process"
df -h                                # свободное место на диске
df -i                                # свободные inode
sudo systemctl restart mariadb

Три типичных сценария: ядро Linux остановило mysqld из-за нехватки памяти, закончилось место на диске и база не может писать журналы и временные файлы, или служба не стартует после обновления из-за ошибки в конфигурации. Перезапуск помогает только в первом случае и только до следующего пика нагрузки, поэтому выясните, что съедает память. Механизм подробно разобран в статье Swap, OOM Killer и tmpfs.

5. Исчерпаны лимиты хостинга

Ошибка, которая то появляется, то исчезает, чаще всего связана с лимитами. Сервер баз данных ограничивает число одновременных соединений: общее (max_connections, в MySQL и MariaDB по умолчанию 151) и для одного пользователя (max_user_connections, на виртуальном хостинге его задает провайдер). Когда лимит исчерпан, новые запросы получают ошибку 1040 Too many connections или 1203 User already has more than ‘max_user_connections’ active connections, а посетители видят Error establishing a database connection.

Соединения держат PHP-процессы, поэтому лимит исчерпывают те же факторы, что и процессорное время: наплыв ботов на wp-login.php, xmlrpc.php и страницы поиска, тяжелые плагины, отсутствие кеша страниц, wp-cron с десятками задач. Если сайт заодно и тормозит в WordPress-админке, причина, скорее всего, общая. На VPS ситуацию видно так:

sudo mysql -e "SHOW VARIABLES LIKE 'max%connections';"
sudo mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';"
sudo mysql -e "SHOW GLOBAL STATUS LIKE 'Max_used_connections';"
sudo mysql -e "SHOW FULL PROCESSLIST;"

Увеличивать max_connections без анализа не стоит: каждое соединение занимает память, и вместо отказа в подключении вы получите остановку сервера. Сначала включите кеш страниц, закройте xmlrpc.php, если он не нужен, и перенесите запуск wp-cron в системный cron. Кто именно генерирует запросы, покажут журналы доступа. Если нагрузка легитимная и стабильно упирается в лимиты, сайт перерос свой тариф и пора переходить на план с большими ресурсами.

6. Поврежденные таблицы базы данных

Таблицы повреждаются после аварийного выключения сервера, переполнения диска или прерванного импорта. Признаки: сообщение One or more database tables are unavailable в админке или записи вида Table ‘wp_options’ is marked as crashed в логах. Перед любым восстановлением сделайте копию базы (wp db export или экспорт в phpMyAdmin). Дальше есть три способа:

  • Встроенный инструмент WordPress. Добавьте в wp-config.php строку define( ‘WP_ALLOW_REPAIR’, true ); и откройте https://example.com/wp-admin/maint/repair.php. Страница работает без входа в админку, поэтому сразу после восстановления удалите эту строку.
  • WP-CLI. Команда wp db check проверяет таблицы, wp db repair восстанавливает их.
  • phpMyAdmin. Отметьте таблицы базы и выберите действие «Восстановить таблицу» (Repair table).

REPAIR TABLE работает для таблиц MyISAM и Aria, а современные базы WordPress в основном используют InnoDB, который восстанавливается автоматически при запуске сервера. Если InnoDB не стартует, на VPS прибегают к параметру innodb_force_recovery, но только чтобы снять дамп данных: значения 4 и выше могут окончательно повредить файлы. Без опыта надежнее вернуть свежую резервную копию.

7. Drop-in db.php, поврежденные файлы или взлом

Если данные доступа верны, phpMyAdmin работает, а WordPress не подключается, загляните в папку wp-content. Файл db.php в ней: это drop-in, который заменяет стандартный класс работы с базой. Его создают, в частности, плагины кеширования запросов и распределения нагрузки между несколькими серверами вроде HyperDB или LudicrousDB, которые берут настройки из собственного файла, а не из wp-config.php. Временно переименуйте db.php в db.php.off: если сайт заработал, причина в плагине, который его создал.

Реже встречаются поврежденные файлы ядра после неудачного обновления: загрузите свежие папки wp-admin и wp-includes с wordpress.org, не трогая wp-content и wp-config.php. Если же в wp-config.php появились чужие строки или изменились данные базы, которые вы не редактировали, считайте это взломом: смените пароли базы, FTP и администраторов, проверьте файлы и выставьте корректные права доступа к файлам. Для wp-config.php обычно достаточно 640 или 600, если PHP работает от имени владельца файлов, как обычно на виртуальном хостинге.

Тестовый скрипт: проверка подключения без WordPress

Скрипт подключается к базе с теми же данными, что и WordPress, и выводит точный код ошибки MySQL. Создайте в корне сайта файл со случайным именем, например db-check-7f3a.php, вставьте код, подставьте данные из wp-config.php и откройте файл в браузере.

<?php
mysqli_report(MYSQLI_REPORT_OFF);
$link = @mysqli_connect('localhost', 'user_wp', 'your-password', 'user_wp');
if (!$link) {
    exit('ERROR ' . mysqli_connect_errno() . ': ' . mysqli_connect_error());
}
echo 'OK, server: ' . mysqli_get_server_info($link);

Строка mysqli_report нужна для PHP 8.1 и новее: без нее неудачное подключение выбрасывает исключение вместо понятного текста. После проверки обязательно удалите файл, ведь в нем записан пароль от базы.

Код Текст ошибки Что означает Что делать
1045 Access denied for user ‘user’@’localhost’ (using password: YES) Неверный логин или пароль либо нет пользователя с таким хостом Задать новый пароль в панели и обновить wp-config.php
1044 Access denied for user … to database … Пользователь существует, но не имеет прав на базу Привязать пользователя к базе, выдать права
1049 Unknown database Базы с таким именем нет Проверить DB_NAME и префикс, импортировать дамп
2002 No such file or directory, Connection refused или getaddrinfo failed Нет сокета, сервер базы не запущен или хост не найден Проверить службу MySQL, попробовать 127.0.0.1, сверить DB_HOST
1040 Too many connections Исчерпан общий лимит соединений сервера Найти источник нагрузки, обратиться к хостеру
1203 User … already has more than ‘max_user_connections’ active connections Исчерпан лимит соединений вашего пользователя Кеш страниц, защита от ботов, перенос cron, тариф мощнее

Виртуальный хостинг или VPS: что можно сделать самому

Действие Виртуальный хостинг VPS
Сменить пароль базы и wp-config.php Да, в панели Да
Восстановить таблицы (repair.php, phpMyAdmin, WP-CLI) Да Да
Перезапустить MySQL или MariaDB Нет, через поддержку Да
Изменить max_connections и память для базы Нет Да
Посмотреть журнал сервера базы данных Обычно нет Да

Обращаясь в поддержку, сразу укажите адрес сайта, точное время появления ошибки, что меняли перед этим (перенос, обновление, новый плагин) и результат тестового скрипта с кодом ошибки. Такой запрос разбирают заметно быстрее, чем короткое «сайт не работает».

Как не допустить повторения

  • Делайте резервные копии базы отдельно от файлов и хотя бы раз проверьте, что из них реально можно восстановиться.
  • Настройте мониторинг доступности сайта: на этой ошибке WordPress отдает код 500, и ее заметит любая проверка статуса страницы.
  • Включите кеш страниц, ограничьте попытки входа на wp-login.php и закройте xmlrpc.php, если он не нужен.
  • Регулярно проводите оптимизацию базы данных: раздутые таблицы опций, ревизий и транзиентов дольше держат соединения.
  • Следите за свободным местом и inode: переполненный диск останавливает базу данных.
  • Не ставьте права 777 на wp-config.php и не храните копии файла с паролем в публичных папках.
Чеклист: как предотвратить ошибку Error establishing a database connection
Что помогает избежать повторения сбоя, а чего делать не стоит

Полезно заранее подготовить собственную страницу на случай сбоя. Если в wp-content есть файл db-error.php, WordPress показывает его вместо стандартного сообщения. Код 503 с заголовком Retry-After подсказывает поисковым роботам, что сбой временный:

<?php
http_response_code(503);
header('Retry-After: 600');
?>
<!doctype html>
<html lang="ru"><head><meta charset="utf-8"><title>Технические работы</title></head>
<body><h1>Сайт временно недоступен</h1><p>Мы уже работаем над этим. Попробуйте через несколько минут.</p></body></html>

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

Можно ли потерять данные из-за этой ошибки?

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

Почему ошибка то появляется, то исчезает?

Почти всегда это лимиты: в пиковые минуты исчерпываются соединения, память или процессы PHP. Сопоставьте время сбоев с журналами доступа и поищите ботов, запуски cron и тяжелые операции в админке.

Сайт работает, а админка пишет, что таблицы недоступны. Что делать?

Часть таблиц повреждена или отсутствует. Сделайте копию базы, включите WP_ALLOW_REPAIR и запустите /wp-admin/maint/repair.php, а после восстановления удалите константу из wp-config.php.

Поможет ли переустановка WordPress?

Обычно нет, ведь проблема в подключении к базе, а не в файлах. Заменять стоит только папки wp-admin и wp-includes, если есть признаки повреждения ядра. Не запускайте установку повторно, если видите страницу инсталляции: сначала проверьте $table_prefix.

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

Сеть WordPress ищет домен в таблицах wp_site и wp_blogs и в константе DOMAIN_CURRENT_SITE. Если там остался старый домен, вы видите Error establishing a database connection с пояснением Could not find site. Обновите домен в wp-config.php и в этих таблицах.

Влияет ли ошибка на SEO?

Короткий сбой на несколько минут позициям не вредит. Если же сайт отдает ошибку часами или днями, поисковики могут временно убрать страницы из выдачи. Быстрое исправление и страница db-error.php с кодом 503 снижают риск.

Вывод

Error establishing a database connection в WordPress только выглядит страшно: обычно причину находят за несколько минут. Прочитайте подробное сообщение в /wp-admin/, сверьте wp-config.php с панелью, проверьте вход в phpMyAdmin и запустите тестовый скрипт, а если сбой повторяется, ищите причину в лимитах и нагрузке. На надежном хостинге с запасом ресурсов такие ошибки случаются реже: у RichHost сайты работают на NVMe-дисках, сайтами и базами данных управляют через собственную панель управления с ИИ-помощником, а тарифы начинаются от $8 в месяц за A3 со скидкой 10% при оплате за год. Что нужно WordPress от хостинга, мы собрали на странице хостинг для WordPress.

Еще по теме

Все статьи
Как установить WordPress на хостинг: автоустановщик и вручную
WordPress-хостинг23.09.2026

Как установить WordPress на хостинг: автоустановщик и вручную

Пошаговая инструкция: как установить WordPress на хостинг автоустановщиком панели хостинга, вручную или через WP-CLI, включить SSL и сделать первые настройки.

ERR_TOO_MANY_REDIRECTS: как исправить цикл переадресаций
Решение проблем хостинга17.09.2026

ERR_TOO_MANY_REDIRECTS: как исправить цикл переадресаций

Как исправить ERR_TOO_MANY_REDIRECTS: находим цикл переадресаций за несколько минут и убираем его в Cloudflare, WordPress, .htaccess, Nginx и панели хостинга.

Ошибка 504 Gateway Timeout: что означает и как исправить
Решение проблем хостинга11.09.2026

Ошибка 504 Gateway Timeout: что означает и как исправить

Что означает ошибка 504 Gateway Timeout и как её исправить: действия для посетителя, команды и записи в логах Nginx и PHP-FPM, таблица…