MySQLの起動、停止ができない場合の対処法


こんにちは。Webシステム課の後藤です。

以前ソケットエラーの記事を書いた際

ソケットファイルが存在しないのが原因の場合の解決策の1つに、
MySQLサーバーの再起動で復元されると書きました。

ただ、こんな場合があります。

  • MySQL manager or server PID file could not be found!
    が出てきて停止できない。
  • MySQL is not running, but lock exists
    が出てきて起動できない。

等ということがあるかもしれません。

今回はこのエラー達の原因と対処法をメモしていこうと思います。

1. 停止できない場合

MySQL manager or server PID file could not be found!
原因は PID ファイルが存在していないor見つけることができないからです。

※PIDファイルとはPIDを記述しておくファイルです。
Linux ではカーネルがプロセス識別子というものを用いてプロセスを管理しています。これがPID(Process ID)です。
mysqldのようにシステムが直接起動している様なプロセスですと、カーネルが忘れない様にpidファイルが生成されます。
/var/run/ 以下を見てみると色々なpidファイルがあります。

対処方法は、PIDファイルを作成することです。
my.cnfから作成する場所を確認します。

/etc/my.cnf

pid-file = /var/run/mysqld/mysqld.pid

/var/run/mysqld/mysqld.pid に設置する設定になっているので、そこにPIDファイルを作成します。

# touch /var/run/mysqld/mysql.pid
# chown mysql:mysql /var/run/mysqld/mysqld.pid

PIDファイルの中身はPIDが記述されていないといけません。

ps aux | grep mysqld

で mysqld(mysqld_safe ではありません)のPIDを確認しましょう。
fde69d1de836ef30f76004ce86430966-600x45
この場合は2846がmysqldのPIDなので、作成したmysqld.pidへ2846を記述します。

echo 2846 > /var/run/mysqld/mysql.pid

これで止められるはずです!

2. 起動できない場合

MySQL is not running, but lock exists

原因はlockファイルが残っているためです。

※lockファイルとは、プロセスの起動に成功した際に作成され、プロセスの停止が成功した際に削除されるという、
重複して同じプロセスを作成しない為のファイルです。

対処方法はlockファイルを削除することです。

# rm /var/lock/subsys/mysql

これで起動できるはずです!

※注意 : 以下の様な場合でも同じエラーが出るようです。

  • /etc/my.cnf で存在しないディレクトリにログを出力するように指定してある
  • 出力先のディレクトリのパーミッションがない

以上、MySQLの起動、停止ができない場合の対処法でした。


この記事をかいた人

About the author