Ошибка подключения к базе данных в WordPress: как её исправить
Как исправить ошибку подключения к базе данных WordPress: проверьте четыре учётных данных в wp-config.php, убедитесь, что сервер базы данных работает, и восстановите повреждённую таблицу.
Опубликовано
Вы открываете сайт, и каждая страница — и публичная часть, и wp-admin — заменена одной серой строкой: Ошибка установки соединения с базой данных. Ничего не отображается, потому что и не может. WordPress не дошёл даже до сборки страницы.
Вот модель, которая делает починку быстрой. WordPress хранит весь ваш контент — записи, страницы, настройки, пользователей — в базе данных MySQL, а не в файлах. На каждый запрос он читает четыре учётных данных из wp-config.php, подключается к этой базе и берёт нужное. Эта ошибка означает, что соединение было предпринято и отклонено. Чтобы исправить, нужно понять, почему его отклонили, а вариантов всего три.
Три причины, в порядке вероятности
- Неверные учётные данные в
wp-config.php— обычный итог переезда на другой хостинг. - Сервер базы данных выключен или перегружен — обычный итог того, что с вашей стороны ничего не менялось.
- База данных повреждена — реже, и проявляет себя иначе.
Разбирайтесь с ними именно в этом порядке.
Шаг 1: проверьте четыре учётных данных
Откройте wp-config.php в корне сайта по SFTP или через файловый менеджер хостинга. Соединение задают четыре строки:
define( 'DB_NAME', 'your_database_name' );
define( 'DB_USER', 'your_database_user' );
define( 'DB_PASSWORD', 'your_database_password' );
define( 'DB_HOST', 'localhost' );
Каждое из этих значений должно в точности совпадать с тем, что выдал хостинг. Откройте раздел баз данных в панели управления хостинга (в cPanel это «MySQL Databases») и сверьте символ за символом:
DB_NAME— хостинги часто добавляют к имени префикс с вашим аккаунтом, напримерcpaneluser_wpdb. Префикс — часть имени.DB_USER— тот же префикс, и пользователь должен быть назначен на эту базу данных, а не просто существовать.DB_PASSWORD— самый частый виновник. Если сомневаетесь, сбросьте его в панели управления и вставьте новое значение. Следите за пробелом в конце и за «умной» кавычкой.DB_HOST— не считайте, что этоlocalhost. Многие хостинги используют отдельный сервер базы данных с адресом вродеmysql.yourhost.com, иногда с:port. Правильное значение показано в панели управления.
Поскольку именно в этом файле и хранятся четыре значения, самый надёжный способ заново получить чистый и правильно закавыченный wp-config.php — генератор wp-config.php: заполните четыре поля базы данных и вставьте результат поверх старого блока.
Один этот шаг устраняет ошибку почти после каждого переезда: учётные данные, которые были верны на старом хостинге, на новом уже не годятся.
Шаг 2: убедитесь, что сервер базы данных действительно работает
Если учётные данные верны, а ошибка не уходит — особенно если она появилась сама без каких-либо изменений с вашей стороны — под подозрением сам сервер базы данных.
На виртуальном хостинге это частое и обычно временное явление: служба MySQL перегружается во время всплеска трафика или упирается в лимит подключений на аккаунт и начинает отклонять новые соединения. Обычно она восстанавливается за несколько минут. Прежде чем предпринимать что-то радикальное, немного подождите и перезагрузите страницу.
Чтобы проверить, действительны ли учётные данные вообще, независимо от WordPress, положите рядом с wp-config.php крошечный скрипт:
<?php
$link = mysqli_connect('localhost', 'your_database_user', 'your_database_password');
if (!$link) {
die('Connection failed: ' . mysqli_connect_error());
}
echo 'Connected — the server and credentials are fine.';
Подставьте свои настоящие DB_HOST, DB_USER и DB_PASSWORD. Если выводится Connected, логин работает, и проблема в другом (повреждённая база данных, Шаг 3). Если выводится ошибка соединения, само сообщение подскажет, какая именно: «Access denied» — неверный пользователь или пароль; «Can’t connect to MySQL server» — неверный хост или действительно недоступная служба, и тогда пора писать в хостинг. Удалите скрипт, как только закончите.
Шаг 3: восстановите повреждённую базу данных
Повреждение от проблемы с подключением отличает один признак: публичная часть открывается, а wp-admin показывает ошибку — или наоборот. Если бы соединение действительно отклонялось, не работало бы ни то, ни другое. Такое расхождение указывает на повреждённые таблицы.
В WordPress есть встроенный инструмент восстановления. Добавьте в wp-config.php одну строку, выше комментария о том, что дальше редактировать не нужно:
define( 'WP_ALLOW_REPAIR', true );
Затем откройте этот URL прямо в браузере:
https://yoursite.com/wp-admin/maint/repair.php
Она загружается без входа — в этом весь смысл, ведь доступ у вас может быть закрыт — и предлагает «Восстановить базу данных» и «Восстановить и оптимизировать базу данных». Запустите.
Затем сразу удалите эту строку из wp-config.php. Пока она на месте, любой человек в интернете может открыть этот URL и запустить восстановление вашей базы данных. Это не необязательная уборка, а закрытие дыры, которую вы только что открыли.
Шаг 4: когда восстановление даже не подключается
Если сама страница восстановления показывает ошибку соединения, восстанавливать нечего — база данных вообще недоступна, и вы возвращаетесь к Шагу 1 или Шагу 2. В этот момент надёжный ход — восстановить базу данных из самой свежей резервной копии хостинга. В большинстве панелей управления хранятся автоматические ежедневные снимки базы данных; восстановление из вчерашней копии почти всегда быстрее и безопаснее, чем гоняться за повреждением, к которому вы не можете подключиться.
Советы, которые можно спокойно игнорировать
«Просто переустановите WordPress». Эта ошибка про подключение к базе данных, а не про файлы ядра. Переустановка заменяет как раз те файлы, что и так работают, и не трогает ничего сломанного.
«Увеличьте лимит памяти PHP». Исчерпание памяти — это другая ошибка с другим сообщением. Повышение лимита ничего не даёт при отклонённом подключении к базе данных и лишь маскирует то, что вы так и не проверили учётные данные.
«Очистите кэш». Сбой происходит в PHP раньше, чем кэш успеет отдать страницу. Пока соединение отклоняется, очистка кэша ничего не меняет; её стоит делать только после того, как сайт вернётся к жизни.
«Отредактируйте базу данных напрямую». Лезть в phpMyAdmin и править таблицы вручную, не убедившись даже, что соединение работает, — так временный сбой превращается в безвозвратную потерю данных. Сначала убедитесь в соединении; данные трогайте в последнюю очередь и только из резервной копии.
Всё ещё не получается?
Если тестовый скрипт подтверждает учётные данные, сервер работает, восстановление подключается и не находит ошибок, а сайт всё равно показывает сообщение, остаётся один подозреваемый — плагин, который обращается к базе данных по собственному соединению: кэширующий или работающий с базой плагин, сохранивший устаревший хост. Чтобы это исключить, переименуйте wp-content/plugins в plugins-off по SFTP. Если ошибка исчезнет, возвращайте плагины по одному, пока она не появится снова.
FAQ
Вопросы
Что означает ошибка подключения к базе данных в WordPress?
Это значит, что WordPress загрузился, прочитал wp-config.php, попытался подключиться к базе данных MySQL с найденными там учётными данными — и получил отказ. Сбой происходит до того, как соберётся хоть одна страница, поэтому весь сайт превращается в одну пустую строку текста. Либо неверны учётные данные, либо сервер базы данных выключен или перегружен, либо повреждена сама база данных.
В каком файле хранится логин к базе данных WordPress?
wp-config.php, в корне сайта рядом с wp-load.php. Соединение задают четыре константы: DB_NAME, DB_USER, DB_PASSWORD и DB_HOST. Один неверный символ в любой из них выдаёт ровно эту ошибку, а чаще всего они устаревают при переезде на другой хостинг.
Почему ошибка появилась, хотя я ничего не менял?
Почти всегда виноват сервер базы данных, а не ваш сайт. На виртуальном хостинге служба MySQL перегружается или упирается в лимит подключений во время всплеска трафика и начинает отклонять новые соединения. Обычно это проходит само за пару минут. Если повторяется постоянно — спрашивайте хостинг или вы переросли тариф.
Всегда ли DB_HOST равен localhost?
Нет, и предположение об обратном как раз и вызывает эту ошибку после многих переездов. Немало хостингов держат базу данных на отдельном сервере, поэтому DB_HOST — это адрес вроде mysql.yourhost.com или IP с портом. Правильное значение показано в разделе баз данных панели управления хостинга. Скопируйте его точно, вместе с суффиксом :port, если он есть.
Как восстановить повреждённую базу данных WordPress?
Добавьте define( 'WP_ALLOW_REPAIR', true ); в wp-config.php, затем откройте yoursite.com/wp-admin/maint/repair.php в браузере и запустите восстановление. Вход не требуется — именно поэтому эту строку нужно удалить сразу, как только закончите: пока она на месте, запустить восстановление может кто угодно. Если подключиться вообще не удаётся, дело в учётных данных или сервере, а не в повреждении.
Почему ошибку показывает только wp-admin, а публичная часть открывается?
Такое расхождение указывает на повреждённую базу данных, а не на проблему с подключением: для публичной части соединение явно работает. WordPress иногда помечает административную часть отдельно. Сначала запустите встроенное восстановление базы данных; если не помогло — восстановите базу из самой свежей резервной копии вашего хостинга.