11

将 DBD::mysql 与 DBI 一起使用,尝试连接到数据库时出现以下错误。

DBI connect('database=mydb:host=localhost','someuser',...) failed: Can't connect 
   to local MySQL server through socket '/tmp/mysql.sock' (2) at ./myscript.pl line 97

是的,MySQL 已启动并正在运行。问题是 mysql.sock 不在 /tmp 中。
我知道 mysql.sock 的位置,并且我目前已经对其进行了黑客攻击,以便它可以工作,我创建了一个指向 mysql.sock 文件当前位置的软链接。我宁愿不更改 MySQL 配置,尽管这可能是最简单的事情。

有没有办法进入 DBD::mysql 并将其配置为在正确的位置查找 mysql.sock ?

4

2 回答 2

15

可以在connect方法中指定socket的位置

my $dbh = DBI->connect("DBI:mysql:database=dbname;host=localhost;mysql_socket=/path/to/mysql.sock","someuser","somepassword", {'RaiseError' => 1});

有关更多信息,请查看此处的文档

于 2009-12-24T11:24:22.847 回答
4
$dbh=DBI->connect("DBI:mysql:database=dbname;mysql_socket=/var/lib/mysql/mysql.sock;user=username;password=password");

您无需指定主机,因为您正在连接到套接字文件。

于 2010-08-19T21:35:07.330 回答