KAKIMASSE

ネットで見つけた面白い記事や、役立つのではと感じたネタなどを書いています。

MYSQL:No mysqld pid file found. Looked for ・・・ の対処方法

      2011/01/12

Vine Linux 3.3の環境のサーバでmy.cnfに変更を加えてMYSQLを再起動した時に

# /etc/init.d/mysql restart
No mysqld pid file found. Looked for /var/lib/mysql/SERVERNAME.pid.

とエラーが返って来たときの対処方法。
ググってみるとあまりこのケースについてはHITせず、 /var/lib/mysql/SERVERNAME.pid を削除したらどうか? ってのがあって
/var/lib/mysql/SERVERNAME.pid を削除してもう一回再起動

# /etc/init.d/mysql restart
No mysqld pid file found. Looked for /var/lib/mysql/SERVERNAME.pid.
→ NG。

ここでパニくりました。
ファイルを削除するんじゃなくてリネームにしときゃ良かった。。とか。
試しに手動で空ファイルを作成しても現象は変わらず。
更にググると再インストールしたら・・とかあるけど
既に稼動中の環境でリスクも高いしやりたくない。
その間もMYSQLはサービスが動いていない状況。。。
根本的原因が何か?を調べてなかった事にようやくここで気がついて、原因調査開始。
MYSQLのエラーログ確認

# cat /var/lib/mysql/SERVERNAME.err
080303 10:10:53 mysqld started
080303 10:10:53 /usr/sbin/mysqld-max: unknown variable 'expire_logs_days=7'
080303 10:10:53 mysqld ended
~途中略~
080303 10:15:16 mysqld started
080303 10:15:16 Can't start server: Bind on TCP/IP port: Address already in use
080303 10:15:16 Do you already have another mysqld server running on port: 3306 ?
080303 10:15:16 Aborting
080303 10:15:16 /usr/sbin/mysqld-max: Shutdown Complete
080303 10:15:16 mysqld ended

元々の原因は expire_logs_days=7 の記述のようです。
何でダメなのかは後で調べるとして早速my.cnfの該当部分を無効にしてもう一回再起動

# /etc/init.d/mysql restart
No mysqld pid file found. Looked for /var/lib/mysql/SERVERNAME.pid.
→ NG。

もう大分落ち着いてきてたのでもう一個のエラーにあった「もう既にMYSQLが動いてますよ」の部分でピーンと来てプロセス確認。

# ps aux|grep mysql
mysql 26072 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26074 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26075 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26076 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26077 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26078 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26079 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26080 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26081 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26082 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26083 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
mysql 26085 0.0 1.7 349488 18544 pts/0 S 09:40 0:00 /usr/sbin/mysq
root 26937 0.0 0.0 4644 696 pts/0 S 10:18 0:00 grep mysql

プロセスが実行中って事は分かりました。でもサービスは使えない。
って事で一回完全にMYSQLを終了することが必要。

# /etc/init.d/mysql stop
No mysqld pid file found. Looked for /var/lib/mysql/SERVERNAME.pid.

→ コマンドでは終了出来ないようなので直接プロセスを停止させる事にします。

# kill 26072(上記プロセスID)

これを順番に先ほどの # ps aux|grep mysql で出てきた mysqlのプロセス全部に実行。
(最後の方のいくつかはプロセスが無いですよってメッセージもありました。)
で、もう一回MYSQLプロセス確認

# ps aux|grep mysql
root 26939 0.0 0.0 4644 696 pts/0 S 10:18 0:00 grep mysql

MYSQLのプロセスが完全に停止している事を確認。
MYSQL開始

# /etc/init.d/mysql start
→ エラーなし。

コマンドでMYSQLへログイン→OK。
これでやっとホッと出来ました。
最後に何で expire_logs_days=7 をmy.cnfに書くとダメだったのかを調査。
調べてみるとMySQL4.1.0から使える機能らしい。
つれづれ: MySQL バイナリログを自動削除したい
サーバのMYSQLのバージョンは 4.0.25 でした...orz
今回のケースで反省点。
最初のmy.cnfに使えない記述を追記、MYSQL再起動→エラー。
この時点でエラーの原因を調べておけばよかったのに /var/lib/mysql/SERVERNAME.pid を削除
これが更にハマったポイントでした。
また一個勉強になりました。
※尚、今回のケースはあくまで私の環境ではこうなったというログです。
同じ事をされる場合は各自の自己責任で行ってください。

 - MYSQL

SPONSORD LINKS

スポンサーリンク

スポンサーリンク

Message

メールアドレスが公開されることはありません。

  関連記事

no image
MYSQL:NOW()やSYSDATE()で返ってくるタイムゾーンを変更したい

久々のエントリーです。 今回はMYSQLで日付や時刻関数を使った時に、 何故か9 ...