MySQLのソケットエラーのトラブルシューティング方法

*シリーズの一部:link:/ community / tutorial_series / how-to-troubleshoot-issues-in-mysql [MySQLの問題のトラブルシューティング方法] *

このガイドは、MySQLセットアップを診断する際のトラブルシューティングリソースおよび開始点として役立つことを目的としています。 多くのMySQLユーザーが遭遇する問題のいくつかを調べ、特定の問題のトラブルシューティングのガイダンスを提供します。 また、特定の場合に役立つ可能性のあるDigitalOceanチュートリアルおよび公式のMySQLドキュメントへのリンクも含めます。

MySQLは、異なるプロセス間の通信を容易にする特別な種類のファイルである_socket file_を使用して、データベースサーバーへの接続を管理します。 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インストールがソケットファイルを探している場所を再確認してください。 この情報は `+ mysql.conf`ファイルにあります:

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インスタンスにさらに深い問題がある可能性があります。その場合、エラーログを調べて、手がかりが得られるかどうかを確認する必要があります。