この人頭いいなと思ったエピソード

以下のようなスクリプトで、以下のようなエラーになっています。

port(socket)を指定しているにもかかわらず使用されない理由も分からないのですが、エラーメッセージのsocketはどこで設定されているのでしょうか?

/etc/my.cnf で /tmp/mysql.sock を指定し、サーバーとクライアントは問題なく通信できています。

よろしくお願いします。

■perlスクリプト
----------------------------------------
#!/usr/local/bin/perl

use DBI;

$user = 'usr';
$passwd = 'password';
$ds = 'DBI:mysql:db_name;host=localhost;port=/tmp/mysql.sock';

$db = DBI->connect($ds, $user, $passwd);

(以下略)

■perlスクリプトのエラー
----------------------------------------
$ ./script_name.pl
DBI connect('db_name;host=localhost;port=/tmp/mysql.sock','root',...) failed: Can't connect to local MySQL server through
socket '/var/lib/mysql/mysql.sock' (2) at ./script_name.pl line 9

■環境
----------------------------------------
mysql:バイナリの(rpmでないやつ)4.0.24-standard
OS:Linux 2.4.20-31.9(REDHAT)
DBD:DBD-mysql-2.9004

A 回答 (2件)

はじめまして。


スクリプトの中の、$ds=の行を
$ds = 'DBI:mysql:db_name:localhost';
としてもダメでしょうか?
socketの設定はmy.cnfの中で定義されてると思うのですが、/etcの中等にありませんか?
もしかしたらperl moduleのインストールに失敗してるのかもしれませんね。
当方の環境は、mysql(ver3.23)、DataDumper、DBI、Msql Mysql modules、osはsolarisです。

この回答への補足

>はじめまして。

はじめまして。

>スクリプトの中の、$ds=の行を
>$ds = 'DBI:mysql:db_name:localhost';
>としてもダメでしょうか?

はい。ダメなので socket を指定しているのですが、指定のsocketが利用されないようです。

>socketの設定はmy.cnfの中で定義されてると思うのですが、/etcの中等にありませんか?

mysqlサーバとクライアントではそれが使用され、問題なく通信出来ています。
しかしPerl DBD mydqlから接続しようとすると、my.cnfの内容は参照されないようです。

>もしかしたらperl moduleのインストールに失敗してるのかもしれませんね。

DBD::Mysqlのmake test で失敗します。

補足日時:2005/04/08 01:16
    • good
    • 0

参考URLによると、UNIXドメインのsocketの場合は、「mysql_socket」を指定するみたいですが。


portはINETドメイン用ではないかと。

参考URL:http://perldoc.jp/docs/modules/DBD-mysql-2.1026/ …

この回答への補足

http://dev.mysql.com/doc/mysql/ja/perl-dbi-class …によると、mysql_read_default_fileを指定するとmysqlの基本設定を読み込んでくれる事が分かりました。

補足日時:2005/05/01 15:08
    • good
    • 0
この回答へのお礼

仰る通りでした。お恥ずかしい限りでございます。

どこかで誤解みたいで、portにsocketファイル名を書けばいいものと思い込んでしまったようです。

>クライアントに組みこまれているソケットのための
>場所以外を使うのでなければ、通常このオプション
>は必要ありません。

上記のように記載されているのですが、このクライアントとは何を指していて、どこから取得されているか分かりますでしょうか。my.cnfではないようなのです。

お礼日時:2005/04/08 18:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!