web-dev-qa-db-ja.com

Mysqlが起動しないmysqld.sockがない

サーバーを再起動した後、「mysql」以外はすべて正常に起動しましたが、手動で起動してみました「/etc/init.d/mysql restart "または" service mysql restart "、失敗しました

ログファイルにはそれは言う:

Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

そのパスをチェックしましたが、そのソケットファイルが見つかりませんでした。アドバイスしてください。

8
MohammedSimba

MySQLを「セーフモード」で起動してsockファイルとpidファイルを作成しようとしましたが、いくつかのエラー「バインド」のために失敗しました。

  1. My.cnfの「bind ip」パラメータのIPアドレスをlocalhostに変更しました
  2. mysqlをセーフモードで起動しました。
  3. mysqlを通常モードで再起動し、すべてがうまくいった。
3
MohammedSimba

システム上のすべてのソケットファイルを検索するには、次のコマンドを実行します。

Sudo find / -type s

私のMysqlサーバーシステムは/var/lib/mysql/mysql.sockでソケットを開いていました

ソケットが開かれている場所が見つかったら、/etc/my.cnfファイルの行にソケットファイルへのパスを追加または編集します。

socket=/var/lib/mysql/mysql.sock

コマンドライン実行可能ファイルを起動したシステム起動スクリプトがフラグ--socket=pathを指定する場合があります。このフラグはmy.cnfの場所を上書きする可能性があり、my.cnfファイルが示すはずの場所にソケットが見つからないという結果になります。その後、mysqlコマンドラインクライアントを実行しようとすると、my.cnfを読み取ってソケットを見つけますが、サーバーが作成した場所から外れているため、ソケットは見つかりません。したがって、ソケットの場所を気にしない限り、my.cnfを変更して一致させるだけで機能します。

Linuxシステムのスーパーユーザーの場合は、上記に基づいて次のようにします。

kill -9 <pid_of_mysql>

または時々これを行うことができます:

pkill -9 mysqld

これを行った後、/var/run/mysqld/でpidファイルを探して削除することができます。

ソケットのパーミッションが、mysqldが実行している任意のユーザーが読み取り/書き込みできるようになっていることを確認してください。簡単なテストは、それを完全な読み取り/書き込みまで開き、それがまだ機能するかどうかを確認することです。

chmod 777 '/var/run/mysqld/mysqld.sock'

それで問題が解決した場合は、セキュリティ設定に基づいて、必要に応じてソケットの権限と所有権を調整できます。

また、ソケットが存在するディレクトリは、mysqldプロセスを実行しているユーザーが到達できる必要があります。

リファレンス: https://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq

3
Peter Nduati

はい、上記のように最初にソケットファイルを見つけます#find / -type s、/ var/run/mysqld /ディレクトリの下にmysqld.sockファイルが見つかった場合、mysqldのインスタンスが実行されているかどうかを確認します#netstat -anpt | grep 3306 or #ps aux | grep mysqld実行中のプロセスを見つけたら、それを停止し(#kill -9 pid)、ソケットファイルを削除します。次に、それを再起動してみて、mysqlがソケットファイルを作成しない場合は、次のように起動してみてください。

#/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/usr --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock

また、my.cnfファイル(/etc/mysql/my.cnf)を確認してbind-addressフィールドをコメント化し、スキップネットワークフィールドが見つかった場合はコメント化します。

1
sreejith KB