Код: Выделить всё
Database_Exception [ 2002 ]: SQLSTATE[HY000] [2002] No route to host
Код: Выделить всё
1. MySQL is hosted on a remote server, not locally.
2. Using a standalone PHP script with PDO or connecting through MySQL Workbench worked fine, but when I tried connecting via the Kohana framework, it threw the No route to host error.
3. I used the server’s IP address in the configuration, not localhost.
После устранения неполадок в различных аспектах, таких как настройки сети, конфигурации брандмауэра и разрешения на доступ к базе данных, мне удалось решить проблему, указав MySQL путь к файлу сокета в файле php.ini. Вот что сработало:
Код: Выделить всё
1. Opened the php.ini file.
2. Added the following line to specify the path to the MySQL socket file:
Код: Выделить всё
pdo_mysql.default_socket = /tmp/mysql.sock
Почему это сработало:
Несмотря на то, что я указал удаленный IP-адрес для MySQL в Kohana, файл pdo_mysql. Параметр default_socket в php.ini, похоже, сыграл роль в разрешении соединения. Вот несколько возможных причин, почему это решило проблему:
Код: Выделить всё
1. Fallback to Socket Connection: PHP’s PDO sometimes tries to use Unix sockets if TCP connections fail. By explicitly setting the socket path, it might have helped PDO handle connections more consistently, avoiding the fallback behavior that caused the error.
2. Environment Differences: While direct scripts and MySQL Workbench connected fine, Kohana might have been using a different PHP runtime configuration that expected a socket path. Explicitly setting pdo_mysql.default_socket ensured consistent behavior across different environments.
3. Potential DNS or Network Delays: Occasionally, network latency or DNS issues can prompt PHP to attempt a local connection through sockets as a fallback. Specifying the socket path made sure PDO could find a stable connection path.
Если вы столкнулись с ошибкой «Нет маршрута к хосту» в Kohana и подтвердили, что IP-адрес, брандмауэр и разрешения указаны правильно set, попробуйте добавить параметр pdo_mysql.default_socket в php.ini. Это обходное решение может устранить несогласованность соединений, вызванную поведением PDO, зависящим от среды или резервным режимом.
Надеюсь, это поможет другим, столкнувшимся с аналогичной проблемой!
Подробнее здесь: https://stackoverflow.com/questions/791 ... -mysql-con