こんにちは!
今回はMySQLの環境構築時に度々発生するソケットエラーの原因について、説明していきます。
ソケットエラーというのは、以下のようなエラーです。
Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
このエラーメッセージを訳すと、「ソケットを通じてローカルMySQLサーバーに接続できません」となります。
本記事では、
- このエラーメッセージの意味がどういう意味なのか
- どのような仕組みで発生するのか
- どう解決するか
について説明していきます。

「MySQLのソケットエラーに度々苦しんでいて、解決方法を知りたい」
「ネットの記事を読んで解決しようとしたけど、解決できなかった」
などの方は参考になるかと思います。
それでは、見ていきましょう!
エラー発生原因
まず、このエラーを理解するには「Unixドメインソケット」について知らなければなりません。
ソケットというのはUnixドメインソケットのことを指しています。
これは、ローカルシステム内で通信を行う際に、ソケットファイルを通じてサーバーとクライアント間での通信を行います。
ここでいうサーバーというのは、MySQLサーバーのことで、クライアントはMySQLクライアントやPHPなどのことです。
MySQLサーバーとMySQLクライアントがわからない方のために、少し補足しておきます。
MySQLサーバー・・・データベースの管理とアクセスを担当します。データベースをホストし、データの格納、検索、更新、削除などの操作を実行します。
MySQLクライアント・・・ユーザーがMySQLサーバーと対話するためのインターフェースです。コマンドなどを打ち込んでMySQLサーバーを通じてDBを操作できます。
今回のエラーメッセージを読むと、「/var/run/mysqld/mysqld.sock」にあるソケットを通じてMySQLサーバーに接続できないという意味になります。
そこで、考えられる原因はおよそ3つになります。
原因1. MySQLサーバーが起動していない
そもそもMySQLが起動していないと接続はできません。
MySQLサーバーの起動確認は以下で行うことができます。
$ ps aux | grep mysqld
これで何かしら出力されたら、起動しています。何も出力されない場合は起動していません。
起動していない場合は、以下で起動できます。
$ sudo /etc/init.d/mysql start
原因2. MySQLサーバーで使用しているUnixソケットと、クライアントソフトで使用しているUnixソケットのパスが違う
この場合、どちらかのUnixソケットパスを一方に合わせればOKです。
MySQLのソケットパスは「my.cnf」という設定ファイルに書かれていて、大抵は「/etc/mysql/conf.d/my.cnf」にあります。
そこでパスを合わせるようにします。
[mysqld]
socket=ソケットパス
[client]
socket=ソケットパス
設定したら、MySQLを再起動します。
$ sudo /etc/init.d/mysql restart
原因3. そもそもソケットファイルがない
今回のエラーの場合は「/var/run/mysqld/mysqld.sock」のファイルが存在しているか確認すればOKですね。
存在していない場合はソケットファイルを作成します。
$ touch /var/run/mysqld/mysqld.sock
そして、MySQLを再起動しておきます。
$ sudo /etc/init.d/mysql restart
今回の筆者のケースはこれでした。
ソケットファイルを作成して再起動したところ、エラーが解消されました。
それでは、今回は以上です。
コメント