php pdo соединение не может быть установлен, но mysql клиент командной строки может

ситуация следующим образом:

сценарий PHP на сервере a, выполненный пользователем 'сеть' (nginx + php-fpm) должен получить доступ к mysql на сервере b через pdo библиотеку, но добирается, SQLSTATE[HY000] [2003] не Может соединиться с сервером MySQL на 'xxx.xxx.xxx.xxx' (4)

сервер песни 6.5, php 5.3; сервер b песни 6.2, mysql 5.1

однако, mysql клиент командной строки - выполненный как непривилегированный пользователь - может соединиться превосходный, восстанавливаемый и стабильный.

однажды mysql клиент командной строки установил успешное соединение между серверами, сценарий PHP работает успешно также в течение приблизительно 5-7 минут, по-видимому, пока mysql соединение клиента командной строки не испытывает таймаут.

что я пропускаю?

вот сценарий тестирования:

   <?php
   try {
   $dbh = new PDO('mysql:host=111.111.111.111;dbname=myname;port=3306', 'myuser',
    'mypass');
  echo 'Connected to database';
}
catch(PDOException $e)
{
echo $e->getMessage();
}
3
задан 5 July 2014 в 11:25
3 ответа

Итак, оказалось, что это все-таки проблема маршрутизации.

В настоящее время мы используем статически маршрутизируемую сеть, а на mysql-сервере a не был определен маршрут обратно к серверу b.

настройка сети немного запутанная, так как физическое соединение идет таким образом: сервер b (off-site) > vpn gw > internet > checkpoint fw > openwrt router > server a

Видимо, клиент командной строки mysql более снисходителен и все равно смог установить такое соединение, но библиотека pdo не была установлена.

После добавления маршрута pdo-библиотека могла успешно устанавливать соединения самостоятельно и с тех пор успешно работает.

Итак, проверьте свои маршруты, даже если соединения ping/telnet/mysql, кажется, работают.

Кстати, покроет ли ошибка "Прерванный системный вызов" этот сценарий?

.
1
ответ дан 3 December 2019 в 07:29
$ perror 4
OS error code   4:  Interrupted system call

При получении этой конкретной ошибки следует просто повторить попытку.

Это может быть признаком сильно загруженного сервера/сети . В этом случае можно попробовать увеличить таймаут соединения в качестве кратковременного исправления и решить проблемы перегрузки на длительный срок.

.
0
ответ дан 3 December 2019 в 07:29

Просто столкнулся с подобной проблемой, хотя она немного отличалась с точки зрения серверов, адресов и т. Д. Важная вещь, которая помогла мне решить эту проблему:

  1. Попытайтесь получить доступ к БД рассматриваемый через CLI из того же окна, на котором работает ваш PHP
  2. Попробуйте подключить БД через PHP из другого окна

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

Проверьте существующих пользователей с помощью

select host, user, password from mysql.user;

. Если вы найдете там что-то вроде:

| host           | user           | password
+----------------+----------------+------------------------------------------
| 10.10.10.1     | myuser         | 
| %              | myuser         | *0803B925439C244BA857C3FD07A4F86A556F0925

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

0
ответ дан 3 December 2019 в 07:29

Теги

Похожие вопросы