<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post/4327/</link>
<title><![CDATA[[实践Ok]PHP连接mysql找不到/tmp/mysql.sock及PDO连接时报错问题分析]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 26 May 2011 06:43:35 +0000</pubDate> 
<guid>http://www.jackxiang.com/post/4327/</guid> 
<description>
<![CDATA[ 
	<textarea name="code" class="php" rows="15" cols="100">
1）加上这个编译项：--with-mysql-sock=/var/run/myslqd/mysqld.sock

2)php.ini里默认是空，就会指向上面的SOCK：
mysqli.default_socket =
pdo_mysql.default_socket=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #应该是这个留空会指向上面的：/var/run/myslqd/mysqld.sock
</textarea><br/><br/>实践证明上面这两个都会指向编译时的mysqld.sock文件位置：<br/>php -i&#124;grep mysqld.sock<br/>&#039;--with-mysql-sock=/var/run/myslqd/mysqld.sock&#039;<br/>mysqli.default_socket =&gt; /var/run/myslqd/mysqld.sock =&gt; /var/run/myslqd/mysqld.sock<br/>pdo_mysql.default_socket =&gt; /var/run/myslqd/mysqld.sock =&gt; /var/run/myslqd/mysqld.sock<br/><br/><br/><br/><br/>PDO连接Mysql出现如下：Connection failed: SQLSTATE[HY000] [2002] Can&#039;t connect to local MySQL server through socket &#039;/usr/local/webserver/mysql/data/mysql.sock&#039; (2)<br/><br/>如下命令编译php后，注意其中有一行是涉及到PDO和MysqlLi的--with-pdo-mysql=/usr/local/webserver/mysql<br/>编译PHP：<br/>wget http://cn.php.net/distributions/php-5.3.6.tar.gz<br/>./configure --prefix=/usr/local/webserver/php --with-config-file-path=/usr/local/webserver/php/etc --with-mysql=/usr/local/webserver/mysql --with-mysqli=/usr/local/webserver/mysql/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl<br/>老外这样说的：configure --with-pdo-mysql --with-mysql-sock=/usr/local/webserver/mysql/data/mysql.sock... This value can either be set at compile time if a domain socket is found at configure. <br/>在：--socket=/data0/data/mysql.sock&nbsp;&nbsp;，这时你一是可以建立软链接<br/>这儿是可以重新编译一次PDO来实现，二是能通过软链接来实现，重新编译PDO如下：<br/>PDO_MYSQL：<br/>http://pecl.php.net/package/PDO_MYSQL<br/>wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz<br/>tar zxvf PDO_MYSQL-1.0.2.tgz<br/>cd PDO_MYSQL-1.0.2<br/>/usr/local/webserver/php/bin/phpize<br/>./configure --with-php-config=/usr/local/webserver/php/bin/php-config --with-pdo-mysql=/usr/local/webserver/mysql<br/>make<br/>make install<br/>cd ../<br/>要么你直接在编译PHP源代码时编译进去，这儿单独编译时可能会找不到mysql.h，造成上面一一致的原因是我修改了原来Mysql默认的配置：mysql.sock的Path，同时修改了PHP里的Mysql常规Path，而这个PDO的PAth没有在PHP.ini里体现出来，没法修改，只有建立软链接或者重新编译才行。这就是根本原因。<br/>(1)直接建立软链接指向其位置:ln -s /data0/data/mysql.sock&nbsp;&nbsp; /usr/local/webserver/mysql/data/mysql.sock 立竿见影。<br/>(2)重新编译PDO【注意把：mysql.sock设置一下位置，让PDO知道不是以前的那个位Path了】<br/>(3)这儿发现第三种方法,修改好编译好的二进制so文件：<br/>vi /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so<br/>找到那个写死了的mysql.sock的配置处，把路径给修改下，再修改回去，呵呵，如下：<br/>@^@^@/root/jackxiang.com/PDO_MYSQL-1.0.2/mysql_driver.c^@^@/usr/local/webserver/mysql/data/mysql.sock^@^@<br/>修改为这样：<br/>@/root/jackxiang.com/PDO_MYSQL-1.0.2/mysql_driver.c^@^@/data0/data/mysql.sock^@^@/root/jackxiang.com<br/>强制写入，这时，我用的是Nginx下Php的FastCGI，得重启下PHPFastCGI，而要是Apache得重启下Apache即可。<br/>这儿的修改可能有些问题：<br/>root@116.255.139.240:/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626# sh /root/runphp.sh <br/>Starting php-fpm /etc/init.d/phpfpm: line 53: 12947 Segmentation fault&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$php_fpm_BIN $php_opts<br/> failed<br/>但是说明一个问题：这个配置/usr/local/webserver/mysql/data/mysql.sock确实是写死在这个：pdo_mysql.so 文件里的!!!<br/><br/>php -i&#124;grep mysql.sock得到如下两个设置的地方，<br/>mysql.default_socket =&gt; /data0/data/mysql.sock =&gt; /data0/data/mysql.sock&nbsp;&nbsp;//常规的Mysql的句柄，和下面不一样导致，pdo报错。<br/>MYSQLI_SOCKET =&gt; /usr/local/webserver/mysql/data/mysql.sock&nbsp;&nbsp;//PDO的Mysql句柄<br/>为何这上面两个不一样呢？请查看： php连接到MySQL数据库服务器时三种主要的API:mysql,mysqli,pdo区别及联系<br/>PHP用PDO连接Mysql时出现问题，PHP代码如下：<br/> &lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp; $dsn = &quot;mysql:host=localhost;dbname=360syn_mysql&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $db = new PDO($dsn, &#039;root&#039;, &#039;&#039;);<br/><br/>root@116.255.139.240:/data0/htdocs/happycun.com# php pdo.php <br/>PHP PDOException:&nbsp;&nbsp;SQLSTATE[HY000] [2002] Can&#039;t connect to local MySQL server through socket &#039;/usr/local/webserver/mysql/data/mysql.sock&#039; (2) in /data0/htdocs/happycun.com/pdo.php on line 3<br/>也就是这个设置不对：MYSQLI_SOCKET =&gt; /usr/local/webserver/mysql/data/mysql.sock<br/>查看Mysql的mysql.sock是在哪儿？如下命令查看：<br/>ps aux&#124;grep mysql<br/>/usr/local/webserver/mysql/bin/mysqld --basedir=/usr/local/webserver/mysql --datadir=/data0/data --plugin-dir=/usr/local/webserver/mysql/lib/plugin --user=mysql --log-error=/data0/data/error_log/log-error.log --pid-file=/data0/data/localhost.localdomain.pid --socket=/data0/data/mysql.sock --port=3306<br/><br/><br/><br/><br/>是谁不小心把/tmp/mysql.sock删除了,最后建立软连接才好了！<br/><textarea name="code" class="html" rows="15" cols="100">
ln -s /usr/local/services/mysql-5.0.2*/var/mysql.sock /tmp/mysql.sock
</textarea><br/>原因：<br/>其本质是在编译Mysql的时候可能此时mysql.sock是在/tmp/mysql.sock,而可能在实际配置Mysql的时候，vi /etc/my.cnf 其定义到了：/usr/local/services/mysql-5.0.2*/var/mysql.sock <br/>---------------------<br/>来源网上：<br/>摘要：解决不能通过mysql .sock连接MySQL问题 这个问题主要提示是，不能通过 &#039;/tmp/mysql .sock&#039;连到服务器，而php标准配置正是用过&#039;/tmp/mysql .sock&#039;，但是一些mysql 安装方法 将 mysql .sock放在/var/lib/mysql .sock或者其他的什么地方，你可以通过修改/etc/my.cnf文件来修正它，打开文件，可以看到如下的东东： 　　[mysql d] 　　socket=/var/lib/mysql .sock 　　改一下就好了，但也会引起其他的问题，如mysql 程序连不上了，再加一点： 　　[mysql ] 　　socket=/tmp/mysql .sock 　　或者还可以通过修改php.ini中的配置来使php用其他的mysql .sock来连，这个大家自己去找找　　　　或者用这样的方法: 　　ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock 成功了,就是这样ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock OK!<br/><br/>[mysqld]<br/>socket=/var/lib/mysql.sock<br/><br/>改一下就好了，但也会引起其他的问题，如mysql程序连不上了，再加一点：<br/><br/>[mysql]<br/>socket=/tmp/mysql.sock<br/><br/>或者还可以通过修改php.ini中的配置来使php用其他的mysql.sock来连:<br/>On my RedHat-Box the socket of mysql is /var/lib/mysql/mysql.sock. In your php.ini you will find a line<br/>mysql.default_socket = /tmp/mysql.sock<br/>change it to<br/>mysql.default_socket = /var/lib/mysql/mysql.sock<br/>Then restart apache and it will work. <br/>---<br/>如果做了软链接依旧连接不上，提示PHP连接mysql找不到&#039;/tmp/mysql.sock，请参阅Mysql绑定端口引发的：ERROR 2003 (HY000): Can&#039;t connect to MySQL server on &#039;127.0.0.1&#039;：<br/>http://jackxiang.com/post/4305/
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post/4327/#blogcomment59700</link>
<title><![CDATA[[评论] [实践Ok]PHP连接mysql找不到/tmp/mysql.sock及PDO连接时报错问题分析]]></title> 
<author>fjiazauu &lt;web1028@163.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Mon, 30 May 2011 19:09:12 +0000</pubDate> 
<guid>http://www.jackxiang.com/post/4327/#blogcomment59700</guid> 
<description>
<![CDATA[ 
	一个活在本人世界里的人
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post/4327/#blogcomment63393</link>
<title><![CDATA[[评论] [实践Ok]PHP连接mysql找不到/tmp/mysql.sock及PDO连接时报错问题分析]]></title> 
<author>pengruncs925 &lt;chuangkhpwnknl21@tom.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 16 Dec 2011 08:40:06 +0000</pubDate> 
<guid>http://www.jackxiang.com/post/4327/#blogcomment63393</guid> 
<description>
<![CDATA[ 
	抢沙发，还没有找到传说中的沙发
]]>
</description>
</item>
</channel>
</rss>