Manuals
RU EN

Старт · 23

Ошибка подключения к базе MySQL

Старт 5 мин чтения

Ошибка подключения к базе при установке почти никогда не значит «скрипт битый». Значит не сошлись хост, логин, пароль, имя базы или права. Установщик лишь показывает то, что вернул mysqli/PDO.

Ниже — разбор по реальным строкам из тикетов. Идите сверху вниз, не прыгайте сразу в «переустановить PHP».

Типичные тексты ошибок

SQLSTATE[HY000] [1045] Access denied for user ... — логин/пароль неверны или пользователь не имеет права коннектиться с этого хоста. На shared пользователь часто вида u12345_shop, а в форму вбили root «как на локалке».

Unknown database 'xxx' — базы с таким именем нет. Опечатка, другая кодировка имени, или базу создали в другом аккаунте панели.

SQLSTATE[HY000] [2002] Connection refused / No connection could be made — MySQL не слушает порт, служба лежит, или указали неверный хост/порт. Локально: не запущен MicroServer/MariaDB. На VDS: mysqld не стартовал после ребута.

Can't connect to local MySQL server through socket — PHP ищет сокет не там. Попробуйте хост 127.0.0.1 вместо localhost (TCP вместо сокета). Наоборот тоже бывает.

Access denied ... to database при живом логине — пользователь есть, но не привязан к этой базе. В phpMyAdmin/панели выдайте привилегии именно на нужную БД.

Порядок проверки

  1. Имя базы — скопируйте из панели, не набирайте по памяти.
  2. Пользователь привязан к этой базе, не «ко всем» наугад и не к соседней.
  3. Хост: локально 127.0.0.1; на Beget/Timeweb — из карточки БД; иногда отдельный hostname.
  4. Порт: обычно 3306. Если панель пишет другой — укажите его в конфиге, если скрипт умеет.
  5. Пароль без пробела в начале/конце. Пересоздайте пароль в панели и вставьте заново.

Проверка «в обход установщика»: зайдите в phpMyAdmin теми же данными или выполните простой коннект из CLI. Если панель пускает, а скрипт нет — смотрите, не подставили ли в форму установщика другие значения.

Локальный Windows / MicroServer

MariaDB слушает 127.0.0.1:3306. Если сервер MicroServer не запущен — будет connection refused, и это ожидаемо. Базу создаёте заранее: phpMyAdmin локально. Пользователь root с пустым паролем на старых стендах ещё встречается; на свежих лучше завести отдельного пользователя под проект.

Не путайте имя папки сайта shop.loc с именем базы. Это разные сущности.

Shared-хостинг

На shared часто:

  • префикс у имени БД и пользователя обязателен — без него панель не создаст;
  • удалённый доступ к MySQL с вашего домашнего IP выключен — и правильно, для сайта на том же сервере нужен localhost;
  • после смены пароля в панели старый пароль в конфиге скрипта остаётся — сайт «вчера работал».

Если перенесли сайт с локалки и оставили в конфиге root без пароля — на проде это почти гарантированный 1045. Порядок переноса: перенос скрипта.

VDS и «всё сам»

Служба не запущена:

systemctl status mysql
# или
systemctl status mariadb

Слушает ли порт только localhost — нормально для сайта на этой же машине. Если PHP в Docker/другом контейнере, а MySQL на хосте — 127.0.0.1 из контейнера укажет не туда. Тогда нужен правильный hostname сети, не «как в мануале для shared».

После импорта дампа доступы в конфиге должны совпасть с новым сервером: миграция dump.

Права и «база есть, таблицы не создаются»

Коннект успешен, а установщик падает на CREATE TABLE — у пользователя нет CREATE/ALTER/INDEX. На минимальных грантах «только SELECT/INSERT» сайт потом «откроется», но установка не закончится. Выдайте полный набор на свою базу на время установки; потом резать привилегии можно, если политика безопасности требует.

Кодировка

Ошибка коннекта редко про charset. Но сразу после успешного входа, если кракозябры — база не utf8mb4. Требования: PHP и MySQL. Пересоздать пустую базу в utf8mb4 проще, чем лечить mixed collation потом.

Не светите пароль в тикете. Достаточно маски: хост, имя БД, имя пользователя, код ошибки (1045/2002/…). Пароль пересоздайте, если уже светили в переписке.

Связанные симптомы

Иногда «ошибка базы» маскируется под HTTP 500: display_errors Off, в логе тот же Access denied. Смотрите error_log — ошибка 500. Если после переноса белый экран и в логе только БД — конфиг не обновили.

Установка с нуля после починки доступов: установка скрипта. Бэкап перед экспериментами с импортом: бэкап.

Проверка коннекта одной строкой

На сервере с PHP CLI:

php -r "mysqli_connect('127.0.0.1','user','pass','db') or die(mysqli_connect_error()); echo 'ok';"

Если здесь ok, а установщик орёт — вы вбиваете в форму другие данные. Если здесь 1045 — чините пользователя, не скрипт. На Windows путь к php — из MicroServer: локальный сервер.

«Работало вчера»

Сменили пароль в панели хостинга, обновили MySQL, переехали на другой контейнер БД у хостера, закончился диск — MySQL не стартует. Диск: мониторинг. После смены пароля обновите конфиг скрипта во всех местах (иногда дубль в local.php).

Права GRANT глазами

SHOW GRANTS FOR 'user'@'localhost';

Должна быть нужная база. Если user@'%' и user@'localhost' — это разные учётки. Установщик подключается одним способом, вы тестируете phpMyAdmin другим — путаница.

Сокет vs TCP ещё раз

Ошибка socket на shared после смены тарифа — попробуйте хост из справки хостера. Иногда пишут localhost:/var/run/mysqld/mysqld.sock. В конфигах скриптов, где поле одно, чаще хватает 127.0.0.1.

После импорта дампа

Коннект есть, сайт открывается, но часть разделов падает — возможно, импорт оборвался. Сверьте число таблиц. Полный цикл: миграция dump, перенос. Кодировка кракозябр — не 1045, но соседняя боль: база должна быть utf8mb4 с самого создания: требования, локально — phpMyAdmin.

Firewall и «внешний» MySQL

На VDS закрыли 3306 — правильно. Если PHP на другой машине вдруг (редко для наших схем) — тогда нужен доступ по приватной сети, не открытие мира. Иначе сканеры. См. firewall, VDS.

Когда коннект починен, а страница всё ещё 500 — в логе уже другая ошибка: ошибка 500. Права на файлы к БД отношения не имеют, но часто чинят параллельно: chmod.

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

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

Чаще всего виноваты хост, логин, имя базы или права пользователя — не «сломанный» скрипт.

Сколько времени занимает «Ошибка подключения к базе MySQL»?

Ориентир по тексту мануала — около 5 мин. На практике зависит от хостинга и подготовки базы.

Нужен ли отдельный сервер?

Для большинства скриптов достаточно хостинга или VDS с PHP и MySQL. Подбор сервера — в разделе VDS и требованиях к PHP/MySQL.

Установка готового скрипта php mysql?

Разбор рядом в мануале по этому запросу. установка готового скрипта php mysql

Требования php mysql для скрипта?

Разбор рядом в мануале по этому запросу. требования php mysql для скрипта

Раздел
Установка PHP-скрипта

От требований к серверу до SSL и cron — все мануалы по запуску готового PHP-скрипта.