在服務器A上部署應用,在服務器B上部署數據庫和緩存。
服務器A:apache2.2,php5.3
服務器B:mysql5.5,redis2.4
問題現象:
本地遠程連接服務器B數據庫成功,
應用服務器A使用mysql-client遠程連接服務器B數據庫成功,
在應用服務器A上使用mysql_connect函數連接失敗,錯誤提示 Can't connect to MySQL server on '172.26.249.228'.
解決方案:
經過排查和猜測,應該是php-mysql拓展組件有問題,於是重新安裝php-mysql的依賴包。
在百度找了
MySQL-shared-compat-5.6.14-1.el6.x86_64.rpm
安裝后,再重新安裝php-mysql。
處理步驟記錄如下:
yum -qa | grep mysql
yum -e xxxxxxxx 把安裝的mysql組件都刪掉。
刪除干凈之后,
y
um install php-mysql
出來的是依賴包mysql-libs版本是5.1的。
依賴包和之前安裝的mysql-server5.5沖突。
在網上百度找到高版本的依賴包,
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.14-1.el6.x86_64.rpm
rpm -ivh MySQL-shared-compat-5.6.14-1.el6.x86_64.rpm
這里只是安裝好了mysql的連接依賴包,有了依賴包,就可以安裝php-mysql的拓展了。
yum install php-mysql
這時已經不再提示要安裝mysql-libs依賴包,可直接安裝php-mysql 5.3.3,完成后,
查看/usr/lib64/php/modules/目錄下,多了mysql相關的so文件。
重啟apache,問題解決。
總結:期間我一開始還懷疑是沒有mysql.sock導致,還在服務器A上安裝了mysql-server5.5,
后來知道方向錯誤了,但就是因為安裝了這個server,在重裝mysql-libs時,才發現了版本沖突的問題,才能最終懷疑到是之前安裝的mysql-libs版本太低,php不能連接高版本的根本原因。
不過話說回來,以上還是一種猜測,或許就是因為有了
mysql.sock和正確版本的mysql-libs,才得以解決。精力有限,有時間再去驗證吧,問題解決了就好。