lnmp环境下php使用PDO_MYSQL mysql端口连接数据库失败

今天一个刚做好的项目(防骗吧) 在本地的wamp环境中使用都是正常的,可今天放到服务器上面却出现了错误,数据库连接,第一反应就是查数据库,找代码调试,上百度等等去找解决方案,最后还是解决了,下面来说说解决的方法。

问题的产生:今天项目上传到正式的服务器环境里产生报错,报错的内容:

ERR: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '=/tmp/mysql.sock'

1、第一反应就是数据库出现了问题,以为是sock文件不存在或是被删除了,可是当我们进入服务器的时候发现/tmp/mysql.sock的文件是存在的。说明不是文件不存在导致的错误。

2、于是继续查找问题,以为是mysql的配置的sock和php配置的sock不一致导致的。于是继续排查问题

进入mysql的配置文件:/etc/my.cnf, 发现socket的目录也是/tmp/mysql.sock ,说明这个不是mysql的配置出错了。

3、于是继续排查问题,看看是不是php的配置的mysql sock 的目录不一样导致的。

进入php的配置文件:/usr/local/webserver/php/etc/php.ini 发现里面的里的socket 目录的文件路径也是一样的。 说明这个不是php的配置文件出现问题了。


由于php的配置文件也是没有错误的,那会是哪里出错的了呢,带着疑问继续排查跟着,原来项目的数据库连接是采用了PDO_MYSQL来做数据库连接,于是想到的php的pdo_mysql扩展里的sock 是否一致呢,经过排查发现,正是这个sock不对应导致的问题,里面没有配置sock。


经过不断的排查终于发现问题了,下面就是解决的方法:

第一:由于php在编译的的时候并没有把--with-pdo-mysql编译进去导致的pdo连接数据库的时候找不到sock文件,可发现我们的php是已经编译好的了,那只能增加编译了,增加编辑模块的方法大家可以试下,由于我们缺少编译pdo-mysql。

a、进入php编译的源码目录:/home/softsrc/php-5.6.10/ext/pdo_mysql/  找到pdo_mysql 文件夹(不同安装方式,目录可能不一样,大家根据自身)

cd /home/softsrc/php-5.6.10/ext/pdo_mysql/
#查找php的扩展目录
/usr/local/webserver/php/bin/phpize
#编译pdo_mysql模块
./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql
make
make install

这样就是编译了pdo_mysql , 查找/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so ,如果已经存在就表示已经安装成功了。 

b、把扩展放进php的配置文件php.ini,在配置文件的 

extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20131226/"

extension = "pdo_mysql.so" 

最后重启一下php 这样php_mysql就编辑成功 了。查找配置看是多pdo_mysql.default_socket的配置了,就表示环境已经安装成功了。

最后把测试代码放给大家,大家可以测试测试,这样就pdo可以使用mysql端口来连接成功。 

$dbhost = 'localhost';
$dbport = '3306';
$dbuser = 'root';
$dbpwd = 'dbpwd';
$dbname = 'dataname';

$option=array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8;", PDO::ATTR_ERRMODE =>  PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC);
try{
    $db = new PDO("mysql:host={$dbhost};port={$dbport};dbname={$dbname}", $dbuser, $dbpwd,$option);
    echo "PDO链接数据库成功";
}catch(Exception $e){
     echo $e->getMessage()."
";
    exit();
}

运行的结果:PDO链接数据库成功object(PDO)#1 (0) { }


本文永久地址:http://www.huanghaiping.com/article/61.html
本文出自 黄海平博客 ,转载时请注明出处及相应链接。

发表我的评论
  

网友最新评论 (0)

暂无评论
返回顶部