MySQLでのPIDファイルの紛失に関するエラーの解決方法
5579 ワード
今日同僚のAさんは私を見つけて、Mysql server Xの負荷が高くて、検索が遅いと言っていました.彼は自分でしばらくいたずらをした後,私たちは一緒に見た.
同僚Aの操作:Aはmysql serverを见て问题がある第1反応はmysql serverを再开することで、薄いです.ただし、エラーコマンドを使用しています.
問題を発見した後、彼はまた次の命令で再起動したはずだと思い出した.
CTRL+Cキャンセル
このとき
システムはまたMysqlプロセスを開始しましたが、しばらくすると自動的に消えてしまい、ログを見ると以下のエラーが見つかります.
そして後ろで一緒に見ましょう.まずclientツールで接続してmysqlが正常であることを発見しました.Webアプリケーション接続データベースも通常はクエリーが遅いだけです.次に、コマンドの下に接続します.
ヒント:
この時、同僚のAさんは私にサービスを再開しても大丈夫だと注意してくれた.彼は私に再起動して問題を解決することを提案しています.はい、彼の望み通りです.そこで私は先に:
そしてmysql data dirの下に行ってみると、やはりpid fileはありません.このとき、私の最初の反応はプロファイルが間違っていて、正常に停止して再起動できないことです.サーバは良いので、以前バックアップした/etc/myを急いで比較しませんでした.cnf.Bakと/etc/my.cnf. まず負荷が高い原因を調べます.コマンドラインの下でmysqlに入ることができないため、clientの下で使用します
中にはlockedのクエリーがたくさん見えますが、待機時間が最も長いのはselectクエリーで、sending dataに表示され、残りはlockedです.sending dataのスレッドが「mysqlに割り当てられたすべてのリソース」を占有していると推測され、その後のスレッドはすべて停止し、「クエリー(スレッド)は順次実行される」ため、後のlockedのスレッドは前のsending dataのスレッドが終わるのを待っていた.sending dataのこのスレッドUはselectクエリーで、このselectは6枚のテーブルを接続し(会社の実習生が提出したクエリー)、そのうち2枚のテーブルのデータ量は10 w前後、もう1枚のdataテーブルのデータ量は1000 w前後、またsum(distinct)、groupby、order by...想像してみてください...このクエリーが実行されるまで何年何月になるか分かりません.このsending dataの遅いクエリーのprocessidは799で、立断で実行されます.
そして運転
前のlockedのスレッドが順番に実行されているのが見えますが、後ろにはスレッドUに似たselectスレッドがたくさんあります.すべてkillが落ちた後、詰まった他の正常ないくつかのUpdate、select、insert操作がすぐに実行されました.その後、webアプリケーションは正常に回復し、速度が速くなります.linuxコマンドラインに戻り、
この場合、server負荷が正常に回復していることがわかります.
再起動を正常に閉じることができない場合を解決します.つまり前の同僚の誤操作による
に表示されます.プロファイルに認識できないパラメータオプションがあるのではないかと疑っていたのではないでしょうか.に合格
プロファイルに問題はないことがわかりました.
私のserverのhostname、mysql pidファイルのデフォルト名はhostname.pid、/etc/myにいなければcnfで特定とpid filenameとpid file pathを指定すると、このファイルはmysqlデータと一緒になります.
この時点で
mysqlユーザが実行するmysqlプロセスのpidを取得しhostnameにインポートする.pidファイルの中
ファイルの所有者グループと所有者グループをmysql:mysqlに変更
次に実行
または、次のプロンプトが表示されます.
やっぱりmysqlはいない.sockこのファイル
でもこの時点で運転
表示
はい、pid fileファイルは正常に戻り、実行します.
この時点で運転します
再起動後、/tmpの下にmysqlがあることがわかります.sockというファイル.
皆さんmysqlを検索してください.sockの用途や使用発生など.
同僚Aの操作1 pidファイルの紛失、操作2 mysqlを招く.sockファイルが失われました.vi mysqldスクリプトとserver mysqlスクリプトに興味があります.その後、service mysql status/stop/start/restartが異常になり、コマンドラインの下でmysql-u root-pがmysql異常にログインします.
That's all.
[root@redhat var]# uname -a
Linux xxx 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux
[root@redhat var]# mysql -u root -p -e “select version();”
+------------+
| version() |
+------------+
| 5.1.32-log |
+------------+
同僚Aの操作:Aはmysql serverを见て问题がある第1反応はmysql serverを再开することで、薄いです.ただし、エラーコマンドを使用しています.
[root@redhat var]# /var/lib/mysql/libexec/mysqld restart ---- ①
100708 14:43:53 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
100708 14:43:53 [ERROR] Aborting
100708 14:43:53 [Note] /var/lib/mysql/libexec/mysqld: Shutdown complete
問題を発見した後、彼はまた次の命令で再起動したはずだと思い出した.
[root@redhat var]# service mysql restart ---- ②
MySQL manager or server PID file could not be found! [FAILED]
Starting MySQL......
CTRL+Cキャンセル
このとき
[root@redhat var]# ps aux | grep mysql
システムはまたMysqlプロセスを開始しましたが、しばらくすると自動的に消えてしまい、ログを見ると以下のエラーが見つかります.
100708 15:26:52 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
100708 15:26:52 [ERROR] Do you already have another mysqld server running on port: 30017 ?
100708 15:26:52 [ERROR] Aborting
そして後ろで一緒に見ましょう.まずclientツールで接続してmysqlが正常であることを発見しました.Webアプリケーション接続データベースも通常はクエリーが遅いだけです.次に、コマンドの下に接続します.
[root@redhat var]# mysql -u root -p
ヒント:
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
この時、同僚のAさんは私にサービスを再開しても大丈夫だと注意してくれた.彼は私に再起動して問題を解決することを提案しています.はい、彼の望み通りです.そこで私は先に:
[root@redhat var]# service mysql stop
MySQL is running but PID file could not be found
そしてmysql data dirの下に行ってみると、やはりpid fileはありません.このとき、私の最初の反応はプロファイルが間違っていて、正常に停止して再起動できないことです.サーバは良いので、以前バックアップした/etc/myを急いで比較しませんでした.cnf.Bakと/etc/my.cnf. まず負荷が高い原因を調べます.コマンドラインの下でmysqlに入ることができないため、clientの下で使用します
show processlist;
中にはlockedのクエリーがたくさん見えますが、待機時間が最も長いのはselectクエリーで、sending dataに表示され、残りはlockedです.sending dataのスレッドが「mysqlに割り当てられたすべてのリソース」を占有していると推測され、その後のスレッドはすべて停止し、「クエリー(スレッド)は順次実行される」ため、後のlockedのスレッドは前のsending dataのスレッドが終わるのを待っていた.sending dataのこのスレッドUはselectクエリーで、このselectは6枚のテーブルを接続し(会社の実習生が提出したクエリー)、そのうち2枚のテーブルのデータ量は10 w前後、もう1枚のdataテーブルのデータ量は1000 w前後、またsum(distinct)、groupby、order by...想像してみてください...このクエリーが実行されるまで何年何月になるか分かりません.このsending dataの遅いクエリーのprocessidは799で、立断で実行されます.
kill 799
そして運転
show processlist;
前のlockedのスレッドが順番に実行されているのが見えますが、後ろにはスレッドUに似たselectスレッドがたくさんあります.すべてkillが落ちた後、詰まった他の正常ないくつかのUpdate、select、insert操作がすぐに実行されました.その後、webアプリケーションは正常に回復し、速度が速くなります.linuxコマンドラインに戻り、
[root@redhat var]# top
<1 cpu >
この場合、server負荷が正常に回復していることがわかります.
再起動を正常に閉じることができない場合を解決します.つまり前の同僚の誤操作による
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
MySQL manager or server PID file could not be found! [FAILED]
に表示されます.プロファイルに認識できないパラメータオプションがあるのではないかと疑っていたのではないでしょうか.に合格
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
プロファイルに問題はないことがわかりました.
私のserverのhostname、mysql pidファイルのデフォルト名はhostname.pid、/etc/myにいなければcnfで特定とpid filenameとpid file pathを指定すると、このファイルはmysqlデータと一緒になります.
[root@redhat var]# diff /etc/my.cnf /etc/my.cnf.bak
この時点で
# mysql data dir(mysql )
# mysql data dir , /var/lib/mysql/var/
[root@redhat var]# cd /var/lib/mysql/var/
mysqlユーザが実行するmysqlプロセスのpidを取得しhostnameにインポートする.pidファイルの中
[root@redhat var]# echo `ps aux | grep mysql | grep "user=mysql" | grep -v "grep" | awk '{print $2}'`>> redhat.pid
# redhat.pid hostname , hostname.pid
ファイルの所有者グループと所有者グループをmysql:mysqlに変更
[root@redhat var]# chown mysql:mysql redhat.pid
次に実行
[root@redhat var]# mysql -u root -p
または、次のプロンプトが表示されます.
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
[root@redhat var]# ls /tmp | grep sock
やっぱりmysqlはいない.sockこのファイル
でもこの時点で運転
[root@redhat var]# service mysql status
表示
MySQL running (10949) [ OK ]
はい、pid fileファイルは正常に戻り、実行します.
[root@redhat var]# service mysql restart
Shutting down MySQL. [ OK ]
Starting MySQL. [ OK ]
この時点で運転します
[root@redhat var]# ls /tmp | grep sock
再起動後、/tmpの下にmysqlがあることがわかります.sockというファイル.
皆さんmysqlを検索してください.sockの用途や使用発生など.
同僚Aの操作1 pidファイルの紛失、操作2 mysqlを招く.sockファイルが失われました.vi mysqldスクリプトとserver mysqlスクリプトに興味があります.その後、service mysql status/stop/start/restartが異常になり、コマンドラインの下でmysql-u root-pがmysql異常にログインします.
That's all.