解决*unix系统下Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

在windows下,即使是root使用也不用强制使用socket,而*unix则不同。
一般情况下,可以设置php.ini与mysql.cnf的配制,使其能找到mysql.sock。
/etc/my.cnf:

port = 3306
socket = /var/lib/mysql_data/mysql.sock


/etc/php.ini:

mysql.default_socket=/tmp/mysql.sock

一种情况是,在系统下没有/tmp/mysql.sock这个文件,但php.ini又指定只能从/tmp位置获取。可以复制吗?
cp /var/lib/mysql/mysql.sock   /tmp/mysql.sock
cp: 无法打开 “/var/lib/mysql/mysql.sock” 读取数据: 没有那个设备或地址,不好意思,设置文件,不能编辑,不能复制。看来只能建立链接

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

再次登陆,应该正常了。
但在php中,运行mysql时可能还是会再次验证sock,这时我们只能作判断了:

if (! function_exists('find_socket'))
{
function find_socket()
{
$file = '/var/lib/mysql/mysql.sock';
$link = '/tmp/mysql.sock'; // php 指定mysql.sock存放地址
return is_file($file) ? $file : ( is_file($link) ? $link : ( is_link($link) ? readlink($link) : null) );
}
}

如果两个位置都不能获取,则只能返回null值。
posted @ 2014-06-10 03:09  sumsung753  阅读(198)  评论(0编辑  收藏  举报