macOSのBrewをアップグレードしてしまった・・

WEB関連
雑記

魔が刺したというか、経緯がどうだったかすでに記憶の彼方ではありますが、思わずbrewをアップデートしてアップグレードしてと、コマンドをパンパンと打ってしまった。
まぁより新しい環境にすることは大事なことですが、ゆっくり時間のある時にしないとハマるとやばい。

案の定、アップグレードしたことでapacheが動作しなくなった。restartも効かない。

さて、どうしよう考える。
幸いここで金曜の夜。土日には多少の用事はあるが最悪キャンセルもできる。

ならばちゃんと作業しようと思い、まず、macOSにバンドルされている方のapacheでphpを動かせる方法ってのを見かけたこともあるし、それを試してみようかとなりました。
参照(1):【macOS 12 Monterey】コード署名証明書によるPHPモジュール有効化

httpdを削除して、バンドルapacheのhttpd.confなどを整えて動かす。ここまではOK。
phpが動いてないので、上記のサイトの方法を試す。

上手くいかん。理由もわからん。

2時間くらいハマってたが、自分のスキルではどうにも無理だということになり、やはりapacheはbrewでインストールして動かそうと思う。
ここで、そういえばMySQL@5.7もbrewでは非推奨になってるし、ついでにMySQL@8系にしてしまえという気分に。ノリでした。

MySQLは動いているので、全データをまとめてエクスポート。

mysqldump -u root -p --all-databases > all_databases.sql  (これはダメ)

このdump方法がいけなかった。
シンプルに書き出しただけでは@8系だと読み込めないがそれを自分は知らず。てか、ChatGPTに「MySQL@5.7->MySQL@8」の手順聞いたら上記で書き出すって教えてくれたので鵜呑みにした。

その後「MySQL@5.7」を削除して、

brew install mysql

上記コマンドでMySQL@8.3.0がインストールされる。
実行するとちゃんと動いてる。なので、

mysql -u root -p < all_databases.sql

でインストールしようとすると、読み込めない。ここでググって気づく。
書き出す時に色々注意が必要だと。てか、自分、気をつけないといかん事くらい知ってたはず。

参照(2):MySQL 8.0 における mysqldump の変更点について

だが、こうなると「MySQL@8.3.0」を削除して「MySQL@5.7」を入れ直し、そこに「all_databases.sql」を読み込んで、そこから再度コマンド付きでエクスポートし直すという面倒な作業が必要になるので、なんとかデータを書き換えて@8系に入るように出来ないかググる。
色々書き換えれば読めるようになるらしいけど、今回エクスポートファイルが7GBもあったので、どうにもできなかった。。(笑)
なので、「MySQL@8.3.0」を削除。
そして、「MySQL@5.7」を再インストール。

ここで「MySQL@5.7」が動かない。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2)
the user specified as a definer ('mysql.infoschema'@'localhost') does not exist

基本的には上記の2つのエラーが解消できない。
たくさんググって事例にそってやってみてもどうにも動かない。

・「/usr/local/var/mysql」 内の削除。
・「/tmp/mysql.sock」 作ってパーミッションは777に。
・「mysql.infoschema’@’localhost」ユーザーを作る(これに関しては作る事自体に失敗)

あたりが今回やってみた対応の一部

動かない。冷や汗が出てくる感じですね(笑)

数時間ハマってどうにもならないので、気分転換。macを再起動。
すると、、、動きやんの。

色々やってみた事も影響はあるんだろうが、再起動で解決。。。となるとショックがでかい。

気を取り直して、「all_databases.sql」をインポート。今までの牛歩が嘘のようにすっきりインポートできて元の状態に。
参照(2)を元に、オプション付きでDBをエクスポートして、再度「MySQL@5.7」を削除して「MySQL@8」をインストール。

MySQLは動いた。が、DBがインポートできない!!

やばいぞ。どうする。。しかしバタバタするしかないので、ググりまくる。
結果、
参照(3):Errror 3554 while importing a .sql file

このサイトの中盤にある「-f」を加えると良いよ。というのを試したらインポートできました。

よしよし。インポートできたならあとはbrewでhttpdを入れて稼働。
php8も動き、mysqlもちゃんと読んでる。
一件落着。

そうそう、mac上でDB扱うのに「Sequel Pro」というアプリ使ってたのですが、これがMySQL@8系には対応してないという事で、対応の「Sequel Ace」という後継アプリに乗り換える。

すると、MySQLにログインできない!

これに関しては全然、訳がわからないのですが、色々やっていくうちに
brew services start mysql
でmysqlをスタートした後に
mysql.server start
をすると「すでにMySQLは動いてるよ!」と注意されるはずなのに、どうにも両方スタートできてしまう。そして、この2パターンで起動したり止めたりを繰り返すと、両方でstopした後に「mysql.server start」だけでスタートするとログインができることがわかったが、その場合、ログインした後DBをリストしてみても1つもDBが入っていない状態。
またターミナル上では「mysql -u root -p」でログイン出来ているので、上の2つともスタートした状態だとDBが全部入っていることがわかったが、「Sequel Ace」でログイン出来ない。

ははーん。これはMac再起動パターンか?

と思ったが、それは間違い。不具合は続く。
結果、
参考(4):How to fix ERROR 1726 (HY000): Storage engine ‘MyISAM’ does not support system tables. in Mysql 8.0 after CREATE USER

にある

mysqld --upgrade=FORCE

を入れるといきなり問題が解消されました。もうこの辺になると手当たり次第、色々試し、再起動も何回したかわからないくらいの状態なので、エラーの原因とか解消の方法とか、その辺の因果関係がわけわからなくなっていると思うので、あまり誰かの参考にはならないと思われる。

ちゃんとしたエンジニアさんなら、こいつ訳のわからんことしてるなー という感じなんでしょうが、いかんせんふだんはphpとかjsとかいじってるだけなので、サーバサイドの事は慣れず。。

しかし、結果apacheも以前より調子良いし、brew周りとかも勉強にもなったので良い土日になったかな。。。
と前向きに考えます(泣)