mysqld.sockには何を含める必要がありますか、なぜ持っていないのですか?


22

/var/run/mysqld/mysqld.sockMySQL 5.1をインストール(または再インストール)したときに、コンピューターにソケットファイルが存在しない理由を誰もが知っていますか?

現在、mysqldでサーバーを起動しようとすると、などのエラーCan't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connectが表示されますが、その名前(ubuntuフォーラムで提案されている)で空のファイルを作成することはできませんでした。

少し前にnattyにアップグレードするまで、mysqlとpostgresの両方が正常に機能していました。私は何が起こっているのかを理解しようとして両方のデータベースを歩いて何時間も費やしました。postgresをあきらめることはできますが、mysqlの作業コピーなしでは作業できません。

最も奇妙な部分:私はKubuntuを使用していますが、KDEはmysqlを使用してユーザーのアクセス許可などを保存していると理解しています。奇妙なアクセス許可の問題は発生していません。これは(何らかの形で)MySQLが実際に動作していることを意味しますか?

たぶん、これらのソケットファイルはnattyの別の場所にあるのでしょうか?OSを新鮮に再インストールする方が簡単でしょうか?この時点で、私は私の時間を無駄にすることを止める提案を受け入れています。


最初にmysqlサーバーを起動してから、そのファイル/var/run/mysqld/mysqld.sockを作成する必要があります。@Paulが言ったように、その場所に置いたファイルを削除する必要があります。
エヴァン胡14

回答:


18

ソケットファイルは実際にはデータを含まず、それを転送します。これは、特殊なシステムコール/コマンドで作成された特殊な異常なタイプのファイルです。通常のファイルではありません。

これは、サーバーとクライアントが接続して要求とデータを交換するために使用できるパイプのようなものです。また、ローカルでのみ使用されます。その重要性は、ファイルシステム内の合意されたランデブー場所としてのみです。

プレーンな古いファイルを作成してその場所に配置すると、実際にサーバーの作成が妨げられ、ローカルクライアントがサーバーに接続できなくなります。

私が推奨するのは、その場所に置いたファイルをすべて削除することです。特別なソケットファイルはサーバーによって作成されます。


1
乏しい表現の質問についてのソケットファイルの説明、および申し訳ありませんしてくれてありがとう: -エラーmysqlのまま投げだった私のオリジナルの問題は、ソケットファイルが欠落していたということでしたCan't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect
egbutterを

しかし、それはどのように作成されますか?まだ持ってないから。
jpganz18

おそらく、その場所にソケットがあることを期待するmysqlクライアントがありますが、サーバーはそこに作成しません(またはサーバーが実行されていません)サーバーが実行されている場合、/ tmpを調べるか、findまたはLocate toソケットファイルを見つけ、-S <ソケットファイルへのパス>でmysqlクライアントを起動します
-sed_and_done

20

を指定するとhost=localhost、mysqlクライアントは、.sockファイルを必要とするUNIX名前付きパイプを使用してmysqlサーバーにログインしようとします。

host = 127.0.0.1を指定することにより、これをバイパスできます。これにより、mysqlクライアントはTCPを使用してサーバーに接続します。

MySQLのドキュメントから引用:

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass

これは、歴史的に言えば、使用したmysql.sockMySQLのすべてのバージョンで(4.0に戻る)正当な理由で消えてしまったためです。これが発生した場合、私はこのようにログインしますが、--protocol=tcp代わりにを使用します--port。mysqlをシャットダウンすると、サービスはソケットファイルを探します。したがって、実行service mysql stopは失敗します。不足しているソケットファイルの頭痛を回避するために、を実行しmysqladmin -h127.0.0.1 --protocol=tcp -uroot -p shutdownます。ああ、ところで、+ 1 !!!
RolandoMySQLDBA

ありがとうございました。これはオンラインでの最初の回答でした:)そして、はい。TCPを使用する別の方法は、-protocol = tcpを指定することです。
sccott

14

ソケットは、データストレージではなく、読み取りと書き込みによるデータ送信に使用される特別な擬似ファイルです。

ソケットファイルは、サービスの開始時に作成され、サービスの終了時に削除されます。ファイルの場所は次の/etc/my.cnfように定義されます。

[mysqld]
socket=/var/run/mysql/mysql.sock

8

私の場合、実行mysqld_safeすると新しいmysqld.sockファイルが作成されました。

$ cd /etc/init.d/
$ mysqld_safe

おそらくプロンプトは表示されませんが、セッションを再開すると、mysqld.sockファイルがどこかにあります。で見つける

$ sudo find / -type s | grep mysqld.sock

2

mysqld.sockが見つからないという問題がありました。/usr/bin私の場合、mysqlを含むディレクトリに移動しました。次に、コマンドを発行しました

mysql mysql --host=localhost --password=whatever --port=3306

ダブルmysqlはタイプミスではなく、mysqlは新しいMySQLインストールで常に存在するデータベースです。--host--passwordまたは--port必要かどうかはわかりませんが、これらのパラメーターを使用して機能したため、それらを含めています。MySQLが起動したら、rootのパスワードを設定するためにユーザーテーブルに入りました。MySQLが起動すると、不足しているソケットファイルが作成されました。何日も苦労していたので、これが誰かの助けになることを願っています。


1

nginx php-fastcgiを使用していて、nginx構成ファイルの仮想ホスト構成を調べる必要があるよりも502 Bad Gatewayエラーが発生した場合。fastcgi_passパラメーターを設定または修正する必要があります。これfastcgi_passは、nginxとphp CGIの間のソケット接続を設定する変数です。

問題の別のポイントは、バイナリスタータースクリプトが次の(重要な)エントリを開くことができないことです: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

私のスタータースクリプト/ usr / bin / php-fastcgiの完全なコンテンツ:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.