2009-12-24 4 views
7

En utilisant DBD :: mysql avec DBI, j'obtiens l'erreur suivante lors d'une tentative de connexion à la base de données.Comment dire à DBD :: mysql où est mysql.sock?

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 

Oui MySQL est opérationnel. Le problème est que mysql.sock n'est pas dans/tmp.
Je connais l'emplacement de mysql.sock et je l'ai actuellement piraté pour que cela fonctionne, j'ai créé un lien vers l'emplacement actuel du fichier mysql.sock. Je préférerais ne pas changer la configuration de MySQL, bien que ce soit probablement la chose la plus facile à faire.

Existe-t-il un moyen d'aller dans DBD :: mysql et de le configurer pour chercher mysql.sock dans l'emplacement correct?

Répondre

13

Vous pouvez spécifier l'emplacement de la prise dans la méthode de connexion

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

Pour plus d'informations s'il vous plaît jeter un oeil à la documentation here

+1

C'est parfait. Merci. – bkoch

3
$dbh=DBI->connect("DBI:mysql:database=dbname;mysql_socket=/var/lib/mysql/mysql.sock;user=username;password=password"); 

Vous n'avez pas besoin de spécifier l'hôte depuis vous vous connectez à un fichier de socket.

Questions connexes