无法通过套接字连接到本地 MySQL 服务器

Posted

技术标签:

【中文标题】无法通过套接字连接到本地 MySQL 服务器【英文标题】:Can't connect to local MySQL server through socket 【发布时间】:2011-01-12 01:54:55 【问题描述】:

当我上传或提交页面时,我的网站出现以下错误:

mysql_real_escape_string() [function.mysql-real-escape-string]: 无法通过socket '/var/lib/mysql/mysql.sock' 连接本地MySQL服务器(2)

这到底是什么意思?

【问题讨论】:

【参考方案1】:

由于对mysql_real_escape_string() 的调用引发了错误,这意味着您没有首先调用mysql_connect() 并将有效的数据库句柄传递给mysql_real_escape_string(或对mysql_connect() 的调用失败)。

在某些情况下,mysql 扩展将尝试使用 php.ini 中的默认设置自动连接,如果这些设置不可用,则故障转移到 my.cnf - 这显然是无效的。或者可能是设置有效但mysqld没有运行。

你有成功连接数据库的脚本吗?

你有数据库的用户名和密码吗?

试试:

check_running();

$user=''; // fill in your details
$password=''; // fill in your details

$hosts=array(
  'localhost', '127.0.0.1', $_SERVER['HTTP_HOST'], $_SERVER['SERVER_ADDR']
);
foreach ($hosts as $addr) 
   try_con($addr, $user, $password);
   try_con($addr . ':3306', $user, $password);


function try_con($host, $user, $password)

 $dbh=mysql_connect($host, $user, $password);
 if ($dbh) 
     print "Connected OK with $host, $user, $password<br />\n";
  else 
     print "Failed with $host, $user, $password<br />\n";
 


function check_running()

   // this assumes that you are using Apache on a Unix/Linux box
   $chk=`ps -ef | grep httpd | grep -v grep`;
   if ($chk) 
      print "Checking for mysqld process: " . `ps -ef | grep mysqld | grep -v grep` . "<br />\n";
    else 
       print "Cannot check mysqld process<br />\n";
   
 

【讨论】:

如果在运行mysqlshowmysql等命令行工具时出现此错误怎么办?【参考方案2】:

没错,有些服务器在连接前使用 mysql 函数时会传递默认连接参数并抛出错误,而有些服务器在您放置代码的任何地方都可以正常工作 在建立 mysql_connect() 连接后放置 mysql_real_escape_string() 总是更安全

【讨论】:

以上是关于无法通过套接字连接到本地 MySQL 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法通过套接字 '/var/mysql/mysql.sock' 连接到本地 MySQL 服务器 (38)

无法通过套接字 '/var/mysql/mysql.sock' 连接到本地 MySQL 服务器 (38)

OperationalError:无法通过套接字连接到本地 MySQL 服务器

mysqli::mysqli(): (HY000/2002): 无法通过套接字 'MySQL' 连接到本地 MySQL 服务器 (2)

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器

错误 2002 (HY000): 无法通过套接字 '/tmp/mysql.sock' 连接到本地 MySQL 服务器