Joomla не подключается к базе данных: как найти причину и восстановить сайт

Если Joomla не может подключиться к базе данных, сайт обычно перестаёт открываться полностью или показывает сообщение о невозможности установить соединение.

Причина может быть довольно простой — например, изменился пароль пользователя базы данных. Но иногда проблема находится глубже:

Поэтому первое правило: не переустанавливать Joomla и не восстанавливать базу вслепую, пока не понятно, почему именно соединение не устанавливается.

  • сервер базы данных остановлен;
  • неверно указан host;
  • пользователь базы удалён;
  • права пользователя изменились;
  • база была перенесена;
  • PHP потерял нужный драйвер;
  • база обновилась или сменилась версия;
  • configuration.php содержит старые реквизиты;
  • сайт подключается не к той базе;
  • достигнут лимит соединений;
  • база доступна локально, но недоступна с веб-сервера.

Сначала определите точный симптом

↑ К оглавлению

Проверьте, что происходит при открытии сайта.

Это может быть:

Error displaying the error page:
Application Instantiation Error

или сообщение о невозможности соединения с базой.

Иногда вместо понятного текста сервер показывает только:

500 Internal Server Error

Важно понять:

Чем точнее исходное событие, тем быстрее диагностика.

  • сайт не открывается вообще;
  • административная панель тоже недоступна;
  • проблема появилась после переноса;
  • ошибка возникла после смены пароля базы;
  • проблема появилась после изменения PHP;
  • ошибка появилась внезапно без изменений сайта.

Вспомните, что менялось перед ошибкой

↑ К оглавлению

Особенно важны события:

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

  • перенос сайта на другой хостинг;
  • перенос базы;
  • изменение пользователя MySQL;
  • смена пароля;
  • восстановление backup;
  • изменение configuration.php;
  • обновление PHP;
  • смена версии MySQL или MariaDB;
  • изменение настроек сервера;
  • смена домена;
  • перенос сайта между VPS;
  • изменение прав пользователя базы.

Проверьте реквизиты базы в configuration.php

↑ К оглавлению

Joomla хранит параметры подключения к базе в корневом файле:

configuration.php

В конфигурации используются параметры типа:

public $dbtype = 'mysqli';
public $host = 'localhost';
public $user = 'database_user';
public $password = 'database_password';
public $db = 'database_name';
public $dbprefix = 'abc_';

Точные значения зависят от сервера.

Для подключения важны прежде всего:

После переноса именно эти параметры особенно часто остаются от старого сервера. Joomla сама рекомендует проверять настройки базы в configuration.php при проблемах после миграции сайта.

  • тип базы;
  • host;
  • имя пользователя;
  • пароль;
  • имя базы.

Не предполагайте, что host всегда localhost

↑ К оглавлению

Очень часто база находится на том же сервере, и используется:

localhost

Но это не универсальное правило.

На некоторых хостингах database host выглядит иначе:

mysql.example-host.net

или представляет собой отдельный IP.

После переноса сайта старое:

localhost

может оказаться неверным.

И наоборот, если сайт раньше подключался к удалённой базе, а теперь база локальная, старый host тоже будет неправильным.

Правильное значение нужно брать из панели хостинга или конфигурации самого database server.

Проверьте имя базы

↑ К оглавлению

Очень распространённая ошибка после переноса:

база импортирована под другим именем, а Joomla продолжает искать старую.

Например:

configuration.php:
client_site

а реально создана:

client_site_new

В таком случае сама база существует, MySQL работает, пользователь существует — но Joomla обращается не туда.

Не ориентируйтесь только на название SQL-файла.

Проверьте фактическое имя базы на сервере.

Проверьте пользователя базы

↑ К оглавлению

У пользователя должны быть права на нужную базу.

Возможны ситуации:

Joomla historically прямо указывает удалённого пользователя или изменённые username/password среди типичных причин потери соединения.

Особенно часто это происходит после миграции между хостингами.

  • пользователь удалён;
  • пользователь создан заново;
  • имя отличается;
  • пароль сменился;
  • пользователь существует, но не привязан к базе;
  • права выданы не на ту базу;
  • доступ разрешён только с другого host.

Проверьте пароль отдельно

↑ К оглавлению

Не меняйте пароль одновременно и в MySQL, и в Joomla, если ещё не знаете, где проблема.

Сначала определите:

Если пароль сменили в панели хостинга, Joomla сама об этом не узнает.

В configuration.php останется старое значение.

  • какой пароль сейчас назначен пользователю;
  • какой пароль указан в configuration.php.

Не публикуйте configuration.php

↑ К оглавлению

Этот файл содержит чувствительные данные.

Не отправляйте его целиком:

Если нужно показать конфигурацию специалисту, скрывайте:

  • в чат;
  • на форум;
  • в публичный репозиторий;
  • в тикет без удаления секретов.
password
user
host
db
secret

или заменяйте реальные значения заглушками.

Проверьте, работает ли сам сервер базы данных

↑ К оглавлению

Даже идеально настроенная Joomla не сможет подключиться, если MySQL/MariaDB/PostgreSQL не работает.

На VPS нужно проверить состояние database service.

Для MySQL это может быть:

systemctl status mysql

или:

systemctl status mariadb

Название зависит от системы.

На shared hosting прямого доступа к systemd обычно нет — состояние базы проверяется через панель или поддержку.

Если database server остановлен, править Joomla бессмысленно.

Сначала восстанавливается сама база.

Проверьте соединение вне Joomla

↑ К оглавлению

Это один из самых полезных тестов.

Если есть SSH и используется MySQL/MariaDB, попробуйте подключиться теми же реквизитами напрямую:

mysql -h HOST -u USER -p DATABASE

После ввода пароля возможны два основных результата.

Если соединение устанавливается:

Joomla config / PHP driver / application layer

становятся более вероятными причинами.

Если MySQL сам отвечает:

Access denied

или:

Unknown database

то Joomla пока вообще ни при чём.

Проблема уже воспроизводится на уровне базы.

Разделяйте ошибки Access denied и Unknown database

↑ К оглавлению

Это разные неисправности.

Например:

Access denied for user ...

обычно направляет к:

А:

  • username;
  • password;
  • privileges;
  • allowed host.
Unknown database ...

означает, что сервер базы найден, но указанной базы на нём нет.

Не меняйте пароль при Unknown database.

И не импортируйте базу заново только из-за Access denied.

Проверьте права пользователя

↑ К оглавлению

Даже правильный логин и пароль не гарантируют нормальную работу.

Пользователь должен иметь необходимые права на Joomla database.

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

После переноса на shared hosting часто бывает:

В панели хостинга эти действия иногда разделены.

  1. база создана;
  2. пользователь создан;
  3. но пользователь не привязан к базе.

Проверьте database prefix, но не путайте его с соединением

↑ К оглавлению

В Joomla также есть:

public $dbprefix = 'abc_';

Префикс используется для таблиц Joomla. Документация Joomla описывает, что #__ в запросах заменяется на фактический prefix сайта.

Но неправильный prefix — это уже не обязательно ошибка самого TCP/database подключения.

Например, соединение с MySQL может быть успешным, но Joomla затем не найдёт нужные таблицы.

Поэтому различайте:

не могу подключиться к серверу базы

и:

подключился, но не нахожу Joomla tables

Проверьте, импортирована ли база вообще

↑ К оглавлению

После переноса файлов Joomla иногда забывают импортировать SQL dump.

Получается:

Технически соединение может установиться, но Joomla не сможет нормально запустить приложение.

Проверьте наличие реальных Joomla tables.

Например, таблиц с текущим prefix.

  • configuration.php указывает на новую базу;
  • пользователь имеет доступ;
  • MySQL работает;
  • но база пустая.

Не исправляйте отсутствие таблиц созданием их вручную

↑ К оглавлению

Если база после переноса пустая или неполная, не создавайте случайные Joomla tables вручную.

Нужно понять:

Создание отдельных таблиц вручную может только замаскировать проблему.

  • был ли импорт;
  • завершился ли он;
  • тот ли dump использовали;
  • не оборвался ли импорт;
  • соответствует ли dump нужному сайту.

Если ошибка появилась после переноса

↑ К оглавлению

Это один из наиболее частых сценариев.

Проверяйте по порядку:

Joomla также рекомендует при копировании сайта менять параметры configuration.php под новое серверное окружение.

  1. импортирована ли нужная база;
  2. как она называется на новом сервере;
  3. какой создан database user;
  4. какой установлен password;
  5. какой требуется host;
  6. привязан ли user к database;
  7. обновлён ли configuration.php;
  8. есть ли нужный PHP database driver;
  9. доступны ли таблицы с правильным prefix.

Проверьте PHP-драйвер базы

↑ К оглавлению

Joomla работает с базой через PHP.

Поэтому ситуация:

MySQL работает

ещё не означает:

PHP умеет подключаться к MySQL

Для Joomla 5.x официальные требования включают PHP database modules:

После смены PHP-version или PHP build нужный модуль может оказаться не установлен.

Проверить модули можно, например:

  • mysqlnd;
  • либо pdo_mysql;
  • либо pdo_pgsql для PostgreSQL.
php -m

Но важно проверить именно ту PHP-конфигурацию, через которую работает сайт.

CLI PHP и PHP-FPM могут использовать разные версии и разные наборы extensions.

Не делайте вывод по php -v

↑ К оглавлению

Команда:

php -v

показывает CLI.

Сайт же может работать через:

PHP-FPM 8.x

другой версии.

Поэтому ситуация вполне реальна:

CLI → mysql driver есть
FPM → mysql driver отсутствует

и Joomla продолжает падать.

Проверяйте фактический runtime сайта.

Проверьте версию базы

↑ К оглавлению

Поддерживаемые версии database server зависят от версии Joomla.

Для Joomla 5.x текущая официальная документация указывает минимум:

Если сайт перенесли на очень старое окружение, проблема может быть не только в логине и пароле.

Сначала зафиксируйте:

  • MySQL 8.0.13;
  • MariaDB 10.4.0;
  • PostgreSQL 12.0.
Joomla version
PHP version
database engine
database version

И только потом оценивайте совместимость.

Если база находится на другом сервере

↑ К оглавлению

При remote database дополнительно проверяйте:

Например, пользователь:

  • доступность database host по сети;
  • firewall;
  • разрешён ли порт;
  • слушает ли база внешний интерфейс;
  • разрешён ли конкретный client host;
  • DNS;
  • database user host restrictions.
user@localhost

и:

user@10.0.0.5

для MySQL — это не обязательно одно и то же разрешение.

После переноса веб-сервера его IP может измениться, и удалённая база перестанет принимать соединение.

Не открывайте MySQL в интернет ради проверки

↑ К оглавлению

Если база недоступна с другого сервера, неправильное решение:

откроем порт 3306 всему интернету.

Доступ должен быть ограничен конкретной инфраструктурой.

Если требуется remote database:

должны настраиваться осознанно.

  • firewall;
  • trusted network;
  • VPN/private network;
  • bind settings;
  • grants

Проверьте DNS для database host

↑ К оглавлению

Если в конфигурации используется hostname:

db.example.net

проверьте, разрешается ли он с самого web server.

Проблема может быть не в MySQL, а в DNS.

Особенно если:

  • меняли DNS;
  • переносили инфраструктуру;
  • database hostname изменился;
  • сервер использует другой resolver.

Проверьте порт базы

↑ К оглавлению

Стандартный MySQL/MariaDB port:

3306

Но инфраструктура может использовать другой.

PostgreSQL обычно:

5432

Не подставляйте порт наугад.

Используйте параметры, которые реально выданы хостингом или настроены на сервере.

Если Joomla иногда подключается, а иногда нет

↑ К оглавлению

Это уже другой класс проблемы.

Если сайт то работает, то выдаёт database connection error, возможны:

В этом случае бессмысленно постоянно менять пароль в configuration.php.

Нужно смотреть:

  • перегрузка database server;
  • слишком много соединений;
  • рестарты MySQL;
  • нехватка памяти;
  • crash базы;
  • network instability;
  • connection limit;
  • проблемы managed database.
  • database logs;
  • uptime;
  • количество соединений;
  • нагрузку;
  • память;
  • ошибки рестарта.

Проверьте Too many connections

↑ К оглавлению

Если журнал базы показывает:

Too many connections

реквизиты подключения могут быть абсолютно правильными.

Сервер просто отказывается принимать новые соединения.

Тогда нужно разбираться:

Повышать max_connections вслепую не всегда правильно: каждый connection тоже потребляет ресурсы.

  • кто создаёт соединения;
  • сколько их;
  • закрываются ли они;
  • какой установлен лимит;
  • нет ли зависших процессов;
  • соответствует ли нагрузка ресурсам.

Проверьте место на диске

↑ К оглавлению

Database server может перестать нормально работать, если заканчивается место.

Это может привести к:

На VPS проверяйте:

  • невозможности писать данные;
  • аварийному завершению;
  • проблемам InnoDB;
  • рестартам;
  • неожиданным ошибкам Joomla.
df -h

Также может быть важен inode usage.

Если диск заполнен, изменение Joomla configuration проблему не решит.

Проверьте журнал базы

↑ К оглавлению

Когда проблема не объясняется реквизитами, смотрите database log.

Он может показать:

Сначала определите реальную database error, а уже затем принимайте решение.

  • crash;
  • out of memory;
  • corruption;
  • permission problem;
  • failed startup;
  • too many connections;
  • storage error;
  • recovery after crash.

Не переустанавливайте Joomla

↑ К оглавлению

Ошибка подключения к базе сама по себе не означает, что повреждены файлы Joomla.

Переустановка ядра:

Поэтому Joomla core здесь обычно вообще не первый объект ремонта.

  • не запустит MySQL;
  • не исправит пароль;
  • не выдаст права пользователю;
  • не импортирует потерянную базу;
  • не установит PHP driver;
  • не исправит network access.

Не создавайте новую базу вместо старой

↑ К оглавлению

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

Сначала определите:

где находится исходная база и сохранились ли данные.

Особенно после миграции.

Пустая база не является восстановлением Joomla.

Не меняйте сразу несколько параметров

↑ К оглавлению

Плохая диагностика:

поменяли host
поменяли user
поменяли password
создали новую database
изменили prefix
перезапустили mysql

и сайт заработал.

Теперь непонятно, в чём была исходная причина.

Лучше:

гипотеза
↓
одна проверка
↓
результат
↓
следующий шаг

Так проблема становится воспроизводимой и исправление — понятным.

Короткий порядок диагностики

↑ К оглавлению

Если Joomla не подключается к базе:

  1. зафиксировать полный текст ошибки;
  2. вспомнить последнее изменение;
  3. проверить configuration.php;
  4. сверить host;
  5. сверить database name;
  6. сверить username;
  7. проверить password;
  8. проверить права пользователя;
  9. убедиться, что database server работает;
  10. проверить подключение к базе отдельно от Joomla;
  11. проверить PHP database driver;
  12. после переноса проверить фактический импорт и prefix;
  13. при remote DB проверить сеть/firewall;
  14. при плавающих ошибках проверить лимиты и database logs;
  15. изменить только локализованную причину;
  16. повторно проверить frontend и /administrator/.

Чего не стоит делать

↑ К оглавлению

Если Joomla не подключается к базе данных, не стоит сразу:

Сначала нужно разделить проблему на уровни:

  • переустанавливать Joomla;
  • создавать новую пустую базу;
  • импортировать случайный старый backup поверх текущей базы;
  • менять одновременно host, user и password;
  • давать пользователю максимальные права без необходимости;
  • открывать database port всему интернету;
  • менять prefix наугад;
  • повышать лимиты соединений без диагностики;
  • публиковать configuration.php с паролями;
  • считать любую database error повреждением базы.
Joomla config
↓
PHP database driver
↓
network
↓
database authentication
↓
database server
↓
database contents

И найти уровень, на котором соединение действительно ломается.

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

Почему Joomla перестала подключаться к базе данных внезапно?

Даже без изменений файлов Joomla причиной может быть остановка database server, изменение пароля пользователя, потеря прав, сетевой сбой, лимит соединений или проблема самого сервера базы.

Где Joomla хранит настройки подключения к базе?

В корневом configuration.php. Там находятся параметры database host, username, password, database name, type и table prefix. После переноса эти значения нужно сверять с новым сервером.

Что делать, если логин и пароль правильные, но Joomla всё равно не подключается?

Проверьте database host, права пользователя, состояние самой базы, PHP database driver и сетевую доступность. Правильные username/password — только часть соединения.

Может ли Joomla не работать из-за версии MySQL?

Да. Joomla имеет минимальные поддерживаемые версии database engines. Для Joomla 5.x сейчас указаны MySQL 8.0.13+, MariaDB 10.4+ и PostgreSQL 12+.

Нужно ли восстанавливать backup при ошибке подключения к базе?

Не автоматически. Если сама база существует и данные целы, backup может вообще не понадобиться. Сначала нужно определить, сломано соединение или действительно потеряны/повреждены данные.

Нужна помощь с Joomla?

Разберу проблему подключения Joomla к базе данных, проверю конфигурацию, PHP-драйвер, права пользователя, сеть и состояние базы, а затем проверю сайт после исправления.