问题
Using DBD::mysql with DBI, I am getting the following error when attempting to connect to the database.
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
Yes MySQL is up and running. The problem is that mysql.sock is not in /tmp.
I know the location of mysql.sock and I currently have it hacked so that it works, I created a soft link to the current location of the mysql.sock file. I would rather not change the MySQL configuration, though this would probably be the easiest thing to do.
Is there a way to go into DBD::mysql and configure it to look for mysql.sock in the correct location?
回答1:
You can specify the location of the socket in the connect method
my $dbh = DBI->connect("DBI:mysql:database=dbname;host=localhost;mysql_socket=/path/to/mysql.sock","someuser","somepassword", {'RaiseError' => 1});
For further information please have a look at the docs here
回答2:
$dbh=DBI->connect("DBI:mysql:database=dbname;mysql_socket=/var/lib/mysql/mysql.sock;user=username;password=password");
You don't need to specify host since you're connecting to a socket file.
来源:https://stackoverflow.com/questions/1957916/how-do-i-tell-dbdmysql-where-mysql-sock-is