どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付いたします

[2002] MySQLのソケットエラー の原因と対処法


こんにちは。Webシステム課の後藤です。

MySQLのクライアントソフト (mysql, PHP, Perl 等)からMySQLへサーバーへ接続する際、

  • Can't connect to local MySQL server through socket '/tmp/mysql.sock'
  • No such file or directory (trying to connect via unix:///tmp/mysql.sock)

のようなエラーが出て接続できないことがあると思います。

これは、「ソケット /tmp/mysql.sock を通じてローカルのMySQLサーバーに接続することができません」という意味です。
(訳しただけですね)

ソケットとは、Unixドメインソケット(ファイルシステムソケット)のことで、ローカルシステム内での通信を行う際に、
このファイルの入出力を通じてサーバー・クライアント間での通信を行います。
仲介役ですね。

では、このようなエラーが発生する原因と、対処の方法を説明したいと思います。

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

$ ps aux | grep mysqld

でプロセスがあるか確認しましょう。
ないなら、起動しましょう。

$ sudo /etc/init.d/mysqld status 

原因2. MySQLサーバーで使用しているUnixソケットと、クライアントソフトで使用しているUnixソケットのパスが違う

No such file or directory (trying to connect via unix:///tmp/mysql.sock)

例えば、上記のエラーからクライアントは /tmp/mysql.sock を参照しているのが判りますが、
MySQLサーバーでは /var/lib/mysql/mysql.sock を参照しているという場合です。

この場合の解決法は2つあります。

解決法A. クライアントをあわせる

MySQLのコンフィグファイル、/etc/my.cnf を参照すると

[mysqld]

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

という感じでパスが記載されているので、クライアントソフトのソケットを同じパスに設定すればよいです。

解決法B. MySQLをあわせる

/etc/my.cnf を下記の様に書き換えましょう。

[mysqld]
socket=クライアントと同じソケットパス

[client]
soket=クライアントと同じソケットパス

書き換えたら、MySQLを再起動してください。

$ sudo /etc/init.d/mysqld restart

原因3. そもそもソケットファイルがない

これも解決方法は2つあります。

解決法A.  MySQLサーバーを再起動すると復元されます。

(※mysql ではなく、サーバーの再起動です。)

$ sudo shutdown -r now

解決法B. ソケットファイルを作りましょう

/etc/my.cnf を見てパスを確認したら、

$ touch /パス/mysql.sock

$ chown mysql:mysql /パス/mysql.sock

そのパスにソケットを作成して、MySQLの再起動をしましょう。

$ sudo /etc/init.d/mysql restart

以上、MySQL 2002 エラーの原因と対処法でした。


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.