20210331_アウトプット(mysqlエラー→解決できた😍)

アプトプット画像

今日やったこと

  • mysqlのエラーと格闘 →解決🎉(4時間)

1%の成長

  • エラーと向き合えた
  • mysqlの理解ちょっと進んだ
  • バージョンアップって学ぶこといっぱいある(上手くいったと思っていても、後で地雷を踏んで爆発することがある💣)


新しい発見

ログの確認

この記事を見て、ログも合わせて確認しようと思った。

dev.mysql.com

ログから読み取ったこととしては、「REDOログはMySQL5.7.9以前に作成されたもの。Data Dictionaryの初期化に失敗したよ」

% tail -f /usr/local/var/mysql/noMacBook-Air.local.err
2021-03-30T22:00:27.181813Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2021-03-30T22:00:27.195807Z 1 [System] [MY-011012] [Server] Starting upgrade of data directory.
2021-03-30T22:00:27.195917Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-03-30T22:00:27.284951Z 1 [ERROR] [MY-013090] [InnoDB] Unsupported redo log format (0). The redo log was created before MySQL 5.7.9 👈👀❗️
2021-03-30T22:00:27.285128Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2021-03-30T22:00:27.286229Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
2021-03-30T22:00:27.286786Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 👈👀❗️
2021-03-30T22:00:27.287122Z 0 [ERROR] [MY-010119] [Server] Aborting
2021-03-30T22:00:27.287726Z 0 [System] [MY-010910] [Server] /usr/local/opt/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.23)  Homebrew.
2021-03-30T22:00:27.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/efuERIKAnoMacBook-Air.local.pid ended
2021-03-30T22:00:37.6NZ mysqld_safe Logging to '/usr/local/var/mysql/efuERIKAnoMacBook-Air.local.err'.
2021-03-30T22:00:37.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2021-03-30T22:00:37.824064Z 0 [System] [MY-010116] [Server] /usr/local/opt/mysql/bin/mysqld (mysqld 8.0.23) starting as process 7372
REDOログって何?
  • 更新履歴のファイルだよ(データベースへの変更があるたびに記録)。ただし上限があるのでいっぱいになると上書きし始める。
  • 上書きすると、そこからログを使って復旧できなくなるため、REDOログが、いっぱいになる前にアーカイブ ログが作成される。
  • アーカイブ ログは、勝手に消えることはないので定期的に削除しないと容量がいっぱいになってしまう。アーカイブ ログについて通常は自動で削除する設定をする。
調べたところから立てた仮説

昨日調べたことも含めて、今回エラーが発生した経緯は、以下の通りでは?と仮説を立て始めた。

(1)macをBigSurにし、RubyRailsをアップデートした時、mysqlは5.6をインストールしてサーバー起動。
(2)brew upgradeにより、てHomebrewでインスールしたパッケージたちが全てバージョンアップ(mysqlも5.6から8.0へ)
(3)macの電源を切った。
(4)ターミナルを再起動した際、mysql8.0が起動。今まで作ったアプリたちはmysql5.6だったので「mysql5.6のログ残っているよ、8.0でこのまま立ち上げできないよ」とエラーに陥った。

と考えた。
当初は「/tmp/mysql.sockがない」ことが原因だと思っていたが、ディレクトリはmysql8.0において存在している。 そのことから、「意図せずmysql8.0の起動になっている部分」を「mysql5.6で起動」すれば上手くいくのではないか?と思った。

↓↓この記事が参考になった。

s8a.jp

直った!!!!!

覚書

  • バージョン指定して起動したら直った。😻❗️💗
noMacBook-Air ~ % /usr/local/opt/mysql@5.6/bin/mysql.server start
Starting MySQL
.. SUCCESS! 
noMacBook-Air action_app % mysql -v
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.51 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates.
(省略)
  • ちなみに、もう一度落として、スタートしたら同じエラーでた(エラーを再現できた!!!)原因はこれだったのか💡嬉しかった〜!!!
  • よく理解しないまま、Qiitaの記事を見て、mysql5.6のファイル等を削除しなくて良かったと感じた😭✨🙏笑
noMacBook-Air ~ % /usr/local/opt/mysql@5.6/bin/mysql.server stop
Shutting down MySQL
. SUCCESS! 
noMacBook-Air ~ % sudo mysql.server start
Password:
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/efuERIKAnoMacBook-Air.local.pid).


感想

  • 時間はかかったけれど、解決できて嬉しかった〜!
  • この感覚は、オリアプを作っていた頃の気持ちを思い出した(笑)
  • プログラミングって「背景や意図など新しい知識を知れた時の面白さ」「エラーに苦しむけど調べまくってブラウザに反映した時(形にできた時)の嬉しさ」2種類あると最近感じている。
  • 最初は「Railsなどの続きやりたいし、変なところでエラー出ないでー!!」と内心思ったが、結果として面白かったから良かった。
  • dumpコマンドで、バックアップを取ることを知った。結果として、mysql5.6のままなので、時間ある時に5.7から8.0にチャレンジしてみよう😊!!