鬼門のSQLエラー...
なかなかはまったので解決までに試したことを記述します。
エラーに到るまで
PCの動作が重くCPUファンも常に回ってるような状況だったので、再起動してみることに。
再起動...おっ!治ったっぽい
しかしmysqlサーバー立ち上げようとしたら
ERROR! The server quit without updating PID file
のエラー発生
環境確認
$ 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.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
とつくプロセスのみ残っていることを確認。
これが原因かなと思ったんですがダメでしたね。
※ 番外
これは試してないんですが次何かしらのエラーが出た時に試したいと思います。
知人で同じエラー出たので試したところ有効な手段でした。
$ 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ヶ月前までのものしかバックアップしてませんでした)
$ 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
しなおすとうまくいきます。
- venderとGemfile.lockを削除
bundle install --path vendor/bundle
bundle exec rails db:create
bundle exec rails db:migrate
※railsコマンド時にはbundle exec
をつけるとvender
ディレクトリ以下を指定して実行することができ、グローバルな環境に作用されないため予期せぬエラーを防げます。
まとめ
結局原因はわからず再インストールという形で解消。
考えられる原因がわかる方はぜひ教えていただけると嬉しいです!
今後はこまめにバックアップ取ろうと思います