[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サーバーが起動していない
1 | $ ps aux | grep mysqld |
でプロセスがあるか確認しましょう。
ないなら、起動しましょう。
1 | $ 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 を参照すると
1 2 3 | [mysqld] socket= /var/lib/mysql/mysql .sock |
という感じでパスが記載されているので、クライアントソフトのソケットを同じパスに設定すればよいです。
解決法B. MySQLをあわせる
/etc/my.cnf を下記の様に書き換えましょう。
1 2 3 4 5 6 7 8 9 | [mysqld] socket=クライアントと同じソケットパス [client] soket=クライアントと同じソケットパス[shell] 書き換えたら、MySQLを再起動してください。 [shell]$ sudo /etc/init .d /mysqld restart |
原因3. そもそもソケットファイルがない
これも解決方法は2つあります。
解決法A. MySQLサーバーを再起動すると復元されます。
(※mysql ではなく、サーバーの再起動です。)
1 | $ sudo shutdown -r now |
解決法B. ソケットファイルを作りましょう
/etc/my.cnf を見てパスを確認したら、
1 2 3 | $ touch /パス /mysql .sock $ chown mysql:mysql /パス /mysql .sock |
そのパスにソケットを作成して、MySQLの再起動をしましょう。
1 | $ sudo /etc/init .d /mysql restart |
以上、MySQL 2002 エラーの原因と対処法でした。