[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=クライアントと同じソケットパス[shell] 書き換えたら、MySQLを再起動してください。 [shell]$ 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 エラーの原因と対処法でした。