2009-12-24 2 views
7

Используя DBD :: mysql с DBI, я получаю следующую ошибку при попытке подключения к базе данных.Как сообщить DBD :: mysql, где находится 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 

Да, MySQL запущен. Проблема в том, что mysql.sock не находится в/tmp.
Я знаю местоположение mysql.sock, и в настоящее время я его взломал, так что он работает, я создал мягкую ссылку на текущее местоположение файла mysql.sock. Я бы предпочел не менять конфигурацию MySQL, хотя это, вероятно, было бы самой легкой задачей.

Есть ли способ войти в DBD :: mysql и настроить его для поиска mysql.sock в правильном месте?

ответ

13

Вы можете указать расположение сокета в методе подключения

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

Для получения дополнительной информации, пожалуйста, посмотрите на документы here

+1

Это прекрасно. Благодарю. – bkoch

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

Вам не нужно указать хост, так как вы подключаетесь к файлу сокета.

Смежные вопросы