Краткий ответ
Когда база данных отклоняет подключение, наиболее частые причины: неверные учетные данные, база не запущена, сетевые проблемы или конфигурация, не разрешающая удаленные подключения. Проверьте, работает ли служба, протестируйте подключение с локальной машины и просмотрите логи базы данных.
Как проявляется проблема
- Приложение выдает ошибку при подключении к базе данных
- Сообщение содержит 'connection refused' или 'can't connect'
- Подключение работает локально, но не с удаленной машины
- База данных падает или перезапускается при попытке подключения
- Ошибка возникает только в производственной среде
Частые причины
База данных не запущена
Служба базы данных может быть остановлена или падать из-за нехватки ресурсов. Проверьте статус службы и логи.
Неверные данные для подключения
Неправильное имя хоста, порт, имя пользователя или пароль препятствуют установлению соединения. Проверьте конфигурацию приложения.
Сетевые проблемы или брандмауэр
Брандмауэр или сетевые правила могут блокировать порт базы данных. Проверьте, доступен ли порт с клиентской машины.
База данных не разрешает удаленные подключения
По умолчанию многие базы данных принимают только локальные подключения. Необходимо настроить параметры, такие как `bind-address` или `listen_addresses`.
Слишком много активных подключений
База данных может отклонять новые подключения, если достигнуто максимальное количество разрешенных. Проверьте `max_connections` и закройте неактивные соединения.
Пошаговое решение
- 1
Проверьте, работает ли служба базы данных
В Windows откройте
services.mscи найдите службу базы данных (например, MySQL, PostgreSQL). В Linux используйтеsystemctl status mysqlилиsystemctl status postgresql. Если служба не запущена, запустите ее командойsudo systemctl start mysql(или соответствующей для вашей базы данных). - 2
Протестируйте подключение с локальной машины
Попробуйте подключиться к базе данных с той же машины, где она работает, используя инструмент командной строки (например,
mysql -u root -pилиpsql -U postgres). Если это удастся, проблема в сети или удаленном доступе. - 3
Проверьте данные для подключения
Убедитесь, что хост, порт, имя пользователя и пароль верны. В приложении проверьте конфигурационные файлы или переменные окружения. Обратите внимание, используете ли вы
localhostили127.0.0.1. - 4
Проверьте, доступен ли порт
С клиентской машины попробуйте
telnet <host> <port>илиnc -zv <host> <port>. Если порт закрыт, проверьте брандмауэр на сервере и сетевые правила. В Windows используйтеTest-NetConnection -ComputerName <host> -Port <port>в PowerShell. - 5
Настройте базу данных для приема удаленных подключений
Перед изменением сделайте резервную копию конфигурационных файлов. Для MySQL измените
bind-addressвmy.cnfилиmy.iniна адрес соответствующего интерфейса (например,0.0.0.0только если доступ ограничен брандмауэром) и перезапустите службу; затем проверьте права пользователя по хосту. Для PostgreSQL изменитеlisten_addressesвpostgresql.confи добавьте соответствующую запись вpg_hba.conf. Для SQL Server включите протокол TCP/IP в SQL Server Configuration Manager, проверьте порт и перезапустите службу. - 6
Проверьте максимальное количество подключений
Подключитесь к базе данных как администратор и выполните запрос для текущего количества подключений (например,
SHOW STATUS LIKE 'Threads_connected';для MySQL). Если оно близко к максимуму, увеличьтеmax_connectionsили оптимизируйте приложение, чтобы оно закрывало неиспользуемые соединения. - 7
Просмотрите логи базы данных
Логи базы данных (например, журнал ошибок MySQL, журнал PostgreSQL или системный журнал) часто содержат точную причину отказа в подключении. Ищите сообщения об ошибках аутентификации или сетевых проблемах.
- 8
Перезапустите базу данных и приложение
Иногда требуется перезапуск службы базы данных и приложения, которое подключается. Используйте
sudo systemctl restart mysqlили соответствующую команду. В производственной среде планируйте перезапуск на время простоя. Затем снова запустите приложение и проверьте, возникает ли ошибка.
Если ничего не помогает
Если вы проверили все вышеперечисленное, а база данных по-прежнему отклоняет подключение, рассмотрите следующее:
- Проверьте версию базы данных и драйвера: Несовместимые версии могут вызывать ошибки при подключении.
- Протестируйте с другого клиента: Попробуйте с другого компьютера или инструмента (например, DBeaver, pgAdmin), чтобы исключить проблему в приложении.
- Временно отключите брандмауэр только на тестовой машине: Никогда не делайте этого на производственном сервере; если необходимо, сделайте это ненадолго и обязательно снова включите брандмауэр.
- Обратитесь к документации: Посмотрите официальную документацию для вашей базы данных.
- Привлеките специалиста: Если проблема остается, обратитесь к более опытному коллеге или в ИТ-поддержку.
Как избежать повторения
- Регулярно обновляйте базу данных и драйверы.
- Используйте надежные пароли и ограничьте доступ необходимыми IP-адресами.
- Следите за количеством активных подключений и при необходимости увеличивайте лимит.
- Тестируйте подключение в среде разработки перед переходом в производственную среду.
Когда лучше обратиться к специалисту
Если у вас нет доступа к серверной инфраструктуре или вы не уверены, как изменить конфигурацию базы данных, обратитесь в ИТ-поддержку. Также, если база данных находится в производственной среде и вы не можете рисковать простоями, лучше, чтобы это сделали более опытные администраторы.
Разработка ПО и продуктов · Приложения на заказ, SaaS и MVP за 4-8 недельЧастые вопросы
Почему база данных отклоняет подключение с удаленной машины, а локально работает?
Скорее всего, база данных не настроена для приема удаленных подключений. Проверьте параметры, такие как `bind-address` (MySQL) или `listen_addresses` (PostgreSQL), и разрешения в `pg_hba.conf` или таблице `mysql.user`.
Как узнать, проблема в базе данных или в приложении?
Попробуйте подключиться к базе данных с помощью инструмента командной строки с той же машины, где находится приложение. Если это удастся, проблема в конфигурации приложения. Если нет, проблема в базе данных или сети.
Что означает ошибка 'Too many connections'?
База данных достигла максимального количества разрешенных одновременных подключений. Увеличьте `max_connections` или оптимизируйте приложение, чтобы оно правильно закрывало соединения.