10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

【MySQLエラー】 ERROR! The server quit without updating PID file

鬼門のSQLエラー...
なかなかはまったので解決までに試したことを記述します。

エラーに到るまで

PCの動作が重くCPUファンも常に回ってるような状況だったので、再起動してみることに。
再起動...おっ!治ったっぽい:grin:

しかしmysqlサーバー立ち上げようとしたら

ターミナル
ERROR! The server quit without updating PID file

のエラー発生:weary:

環境確認

ターミナル
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6

$ mysql --version
mysql  Ver 14.14 Distrib 8.0.18_1, for osx10.14 (x86_64) using  EditLine wrapper

$ ls /usr/local/Cellar/mysql*
/usr/local/Cellar/mysql:
8.0.18_1

/usr/local/Cellar/mysql@5.7:
5.7.28

パスの確認もしておきます。

ターミナル
$ cat .bash_profile
export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"

試したこと

ここから解決法として記事はあるけど解決しなかった方法を記述します。
結果どうしたかだけ見たい方はこちらからどうぞ。
解決法

1.MySQL8系のアンインストール

まず環境確認した時に、mysql8系と5系の二つインストールされてること、パスはmysql5.7であることを確認。(8系インストールした記憶ない)

とりあえず8系いらないのでアンインストール。

ターミナル
$ brew uninstall mysql

2.pidファイルがない?

参照:mysql 起動時のThe server quit without updating PID file エラーの回避法

まずはThe server quit without updating PID fileエラーメッセージに従ってpidファイルが存在しているか確認。

ターミナル
$ ls /usr/local/var/mysql

[マシンのホスト名].local.pidの存在を確認。
ホスト名はuname -nで確認できる。
なければpidファイルを作りましょう

これが原因ではなさそう。

3.pidファイルに権限が設定されていない?

mysql以下のファイルの所有者をすべて_mysqlにする。

ターミナル
$ sudo chown -R _mysql:_mysql /usr/local/var/mysql/

4.リンクを切り替えてみる

参照:MacのOSをアップデートした後にMySQLが使えなくなった場合の対処方法

mysql8系にリンクが設定されていた可能性も考えて、(先ほどアンインストールしましたが)mysql5.7にリンクを付与してみます。

ターミナル
$ brew link --force mysql@5.7

5.サーバーが複数起動してる?

参照:mySqlサーバを止められなくなったとき

状態の確認から。

ターミナル
$ mysql.server status
 ERROR! Multiple MySQL running but PID file could not be found (87129 87225 )

PID file could not be found (87129 87225 )このプロセスIDを停止させます。

ターミナル
$ sudo kill 87129
$ sudo kill 87225

プロセスの確認をします。

ターミナル
$ ps ax | grep mysql
xxxxxxxxxxxxxxxxxxxxxxxx...grep mysql

語尾にgrep mysqlとつくプロセスのみ残っていることを確認。

これが原因かなと思ったんですがダメでしたね。

※ 番外

mysqlが起動できない!のエラーが出るときの対処法

これは試してないんですが次何かしらのエラーが出た時に試したいと思います。
知人で同じエラー出たので試したところ有効な手段でした。

ターミナル
$ tail -f /usr/local/var/mysql/***.err

上記コマンドを打って、他のターミナルで

ターミナル
$ mysql.server start

と打つと[ERROR]となっている箇所があるらしくそこにエラーの内容が書いてあるそうです。

解決法

結局再インストールしました。

ターミナル
$ brew uninstall mysql@5.7
$ brew install mysql@5.7

.
.
.

$ sudo mysql.server start
Starting MySQL
. SUCCESS!

補足(Railsアプリケーション立ち上げまで)

ひとまずmysqlエラーは解決しましたが、ここからRailsアプリケーション立ち上げるまでも結構はまったので対処法を記述します。

mysqldumpファイルをリストア

まずはmysqldumpでバックアップをとってあればリストアしてDBを復元しましょう。
(私は1ヶ月前までのものしかバックアップしてませんでした:cold_sweat:)

ターミナル
$ mysql -u root -f < hogehoge.sql

-fオプションでエラーを無視して実行します

DBの作成

バックアップ漏れしていたデータベースを作成します。

ターミナル
$ bundle install
$ bundle exec rails db:create

ですんなりいくかとおもいきやここでエラー。

どうやらGemを入れ直す必要があるそうです。
MySQLがある状態でbundleしないと整合性が取れない?らしく、今はbundleされていてMySQLをインストールしてきている状態のためMySQLでエラーが出ていたそうです。

なので、vendorディレクトリとGemfile.lockファイルを削除して改めてbundleしなおすとうまくいきます。

  1. venderとGemfile.lockを削除
  2. bundle install --path vendor/bundle
  3. bundle exec rails db:create
  4. bundle exec rails db:migrate

※railsコマンド時にはbundle execをつけるとvenderディレクトリ以下を指定して実行することができ、グローバルな環境に作用されないため予期せぬエラーを防げます。

まとめ

結局原因はわからず再インストールという形で解消。
考えられる原因がわかる方はぜひ教えていただけると嬉しいです!

今後はこまめにバックアップ取ろうと思います:sweat_smile:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
10
Help us understand the problem. What are the problem?