« ユーザや権限を管理するテーブル(MySQL) | トップページ | ディレクトリ内のファイル数をカウント(Linux) »

「Can't connect to local MySQL server through socket '/tmp/mysql.sock'」

MySQLのクライアントソフト(mysql,PHP,Perl等)からMySQLサーバに接続しようとすると、

<p>「Can't connect to local MySQL server through socket」エラーについて</p>

Can't connect to local MySQL server through socket '/tmp/mysql.sock'」のようなエラーが出力されて接続に失敗することがある。

1.原因の分析

まずはじめに、エラーメッセージは次の意味を持ちます。

<p>「Can't connect to local MySQL server through socket」エラーについて</p>

「ソケット'/tmp/mysql.sock'を通じてローカルのMySQLサーバーに接続することが出来ません」。ソケットとはプロセスやネットワーク間の通信機構のことで、MySQLではこのソケットを通じてサーバとクライアントとが接続されます。ソケットというとポート番号を指定して利用する方法が思い浮かびますが、ここでは/tmp/mysql.sockというファイルが出てきています。これはUNIXドメインソケット(ファイルシステムソケット)と言って、UNIX系OS特有のソケットで、ローカルシステム内での通信を行なう場合に用いられます。このソケットの実体はファイルでサーバ・クライアント間の通信は、実際は、このファイルの入出力を通じて行なわれます。

2.原因1:MySQLサーバが起動していない

MySQLサーバが生存していないとこのエラーがでます。「ps ax | grep mysqld」などのなどのコマンドでプロセスの確認を行なう。

3.原因2:MySQLサーバとクライアントで、使用しているUNIXソケットパスが異なる

サーバとクライアントは同じソケットファイルを参照しなければならないのですが、関連する各ソフトのインストール方法が異なる場合は、違うソケットが参照される可能性があります。(例えば、MySQLはソースからインストール、PHPはRPMからインストールというように)。この場合、MySQLサーバは/tmp/mysql.sockを利用しているのにPHPでは/var/lib/myswl/mysql.sockに接続しに行こうとする、というような事態になり接続が成立しません。解決方法としては、MySQLサーバに合ったソフトをインストールするのが一番良いのですが、次のような方法も考えられます。

(1)MySQLサーバで使うソケット(/etc/my.conf)をクライアントに合わせる

   [mysqld]

   # socket=/var/lib/mysql/mysql.sock

   socket=/tmp/mysql.sock

   [client]

   socket=/tmp/mysql.sock

(2)クライアント側で接続先のソケットを指定する(例はPHPの場合)

   if(!$con=mysql_connect("localhost","mysql","passwd")){
   ↓
   if(!$con=mysql_connect("localhost:/var/lib/mysql/mysql.sock","mysql","passwd")){

4.原因3:なんらかの理由でソケットファイルに異常がある

最後にソケットファイルが削除されている場合があります。この場合、MySQLサーバを一旦シャットダウンして再起動をかけるとソケットファイルが復元されます。また、これでソケットファイルが作成されない場合はソケットファイル格納ディレクトリのパーミッションの問題が考えられます。ソケットを作成できない場合はMySQLのエラーログが出力されるのでそれを参考にできます。僕の場合は、パーミッションの問題でソケットファイルを読み込めずにエラーが出力されていました。

« ユーザや権限を管理するテーブル(MySQL) | トップページ | ディレクトリ内のファイル数をカウント(Linux) »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/206331/42137130

この記事へのトラックバック一覧です: 「Can't connect to local MySQL server through socket '/tmp/mysql.sock'」:

» 『恋のから騒ぎ』15期生“安里優美”A V出演「天然むすめ」に出演していた。動 画&画 像公開! [『恋のから騒ぎ』15期生“安里優美”A V出演「天然むすめ」に出演していた。動 画&画 像公開!]
中越典子 ブログ, 中越典子 画像, 中越典子 上地雄輔, 中越典子 熱愛, 中越典子 ストロベリー, 中越典子 youtube, 中越典子 水着, 木村佳乃 中越典子, 中越典子 動画, 中越典子 温泉 [続きを読む]

« ユーザや権限を管理するテーブル(MySQL) | トップページ | ディレクトリ内のファイル数をカウント(Linux) »