MySQLでソケットエラーをトラブルシューティングする方法
MySQLは、ソケットファイルを使用してデータベースサーバーへの接続を管理します。これは、異なるプロセス間の通信を容易にする特別な種類のファイルです。 MySQLサーバーのソケットファイルの名前はmysqld.sock
で、Ubuntuシステムでは通常/var/run/mysqld/
ディレクトリに保存されます。 このファイルは、MySQLサービスによって自動的に作成されます。
システムまたはMySQL構成を変更すると、MySQLがソケットファイルを読み取れなくなり、データベースにアクセスできなくなる場合があります。 最も一般的なソケットエラーは次のようになります。
OutputERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
このエラーが発生する理由はいくつかあり、それを解決するためのいくつかの潜在的な方法があります。
このエラーの一般的な原因の1つは、MySQLサービスが停止しているか、最初から開始されていないことです。つまり、そもそもソケットファイルを作成できませんでした。 これがこのエラーが表示される理由であるかどうかを確認するには、systemctl
でサービスを開始してみてください。
sudo systemctl start mysql
次に、MySQLプロンプトに再度アクセスしてみてください。 それでもソケットエラーが発生する場合は、MySQLインストールがソケットファイルを探している場所を再確認してください。 この情報は、mysqld.cnf
ファイルにあります。
sudo nano /etc/mysql/mysql.conf.d/mysql.cnf
このファイルの[mysqld]
セクションでsocket
パラメーターを探します。 次のようになります。
/etc/mysql/mysql.conf.d/mysqld.cnf
. . . [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 . . .
このファイルを閉じてから、MySQLがファイルを見つけることを期待しているディレクトリでls
コマンドを実行して、mysqld.sock
ファイルが存在することを確認します。
ls -a /var/run/mysqld/
ソケットファイルが存在する場合は、次のコマンドの出力に表示されます。
Output. .. mysqld.pid mysqld.sock mysqld.sock.lock
ファイルが存在しない場合は、MySQLがファイルを作成しようとしているが、作成するための適切な権限がないことが原因である可能性があります。 ディレクトリの所有権をmysqlユーザーおよびグループに変更することで、正しい権限が設定されていることを確認できます。
sudo chown mysql:mysql /var/run/mysqld/
次に、mysqlユーザーがディレクトリに対する適切な権限を持っていることを確認します。 これらを775
に設定すると、ほとんどの場合機能します。
sudo chmod -R 755 /var/run/mysqld/
最後に、MySQLサービスを再起動して、ソケットファイルの作成を再試行できるようにします。
sudo systemctl restart mysql
次に、MySQLプロンプトにもう一度アクセスしてみてください。 それでもソケットエラーが発生する場合は、MySQLインスタンスにさらに深刻な問題がある可能性があります。その場合は、エラーログを確認して、手がかりが得られるかどうかを確認する必要があります。