Centos
php pdo連接無法建立,但是mysql命令行客戶端可以
情況如下:
伺服器 a 上的 php 腳本,由使用者 ‘web’ (nginx + php-fpm) 執行,應該通過 pdo 庫訪問伺服器 b 上的 mysql,但獲取 SQLSTATE
$$ HY000 $$ $$ 2003 $$無法連接到“xxx.xxx.xxx.xxx”上的 MySQL 伺服器 (4) 伺服器一個centos 6.5,php 5.3;伺服器 b centos 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(); }
所以事實證明這畢竟是一個路由問題。
我們目前使用的是靜態路由網路,mysql 伺服器 a 沒有定義返回伺服器 b 的路由。
網路設置有點混亂,因為物理連接是這樣的:伺服器 b(異地)> vpn gw > 網際網路 > 檢查點 fw > openwrt 路由器 > 伺服器 a
顯然 mysql 命令行客戶端更寬容,無論如何都能夠建立該連接,但 pdo 庫不能。
添加路由後,pdo 庫可以自行成功建立連接,並在之後愉快地執行。
因此,請檢查您的路由,即使 ping/telnet/mysql 連接看似正常。
順便說一句,錯誤“中斷的系統呼叫”會涵蓋這種情況嗎?