MySQLのソケットエラーの原因について

データベース

こんにちは!

今回は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

今回の筆者のケースはこれでした。

ソケットファイルを作成して再起動したところ、エラーが解消されました。

それでは、今回は以上です。

コメント

タイトルとURLをコピーしました