- 投稿日:2020-08-05T20:20:07+09:00
macOS mojave(10.14.6)のphpを7.3にアップデート(mysql opensslエラーのおまけつき)
背景
新規PJ(php)のローカル環境構築にあたり、
php spark serve
というコマンド使ってね、と伝達うけて、
早速起動してみたところ、php7.2以上が必要とのエラーが。
php -v
たたいてみると、
私のmacは、OS mojaveのデフォルトの7.1系だったので、
上位版を入れることにしました。ボツ案:そうだ、phpenvで切り替えよう
普段nodeのバージョン切り替えにanyenv内のnodenv利用しているのですが、
anyenvにphpのバージョン切り替えられるのって入ってなかったっけ・・
って思ったら、あるじゃない、phpenvというものが。phpのご本家で確認すると、最新のstable版は7.4.8とのことで、
anyenv install phpenv
して、phpenv install 7.4.8
で楽勝じゃん!とか思ったのだが、そもそも、「phpenv anyenv 7.4」とかで出てくる参考記事を見ていると、
他の方があげている記事のほとんどが、エラーだのライブラリが足りないだの、
けっこう手こずっていらっしゃる。例によってわたしもエラーになった。(爆)かたや、「macos mojave php バージョン アップデート」でぐぐってみると、
なんか・・こっちのほうがシンプルにいきそうじゃない?どうせエラーと戦うことになるならば、
phpenv経由で頑張って入れるより、brew経由のほうが楽そう
と思い、後者を選択。(皆さんの知見にいつも感謝しています)結論:Homebrewでシステムのphpごとあげよう
基本は下記の方の記事をまるっと参考にしました。
@7.4のほうが新しいですが、とりあえず同じように@7.3でやってみました。homebrewは入っていたので
$ brew search php@7と叩くと、インストールできる一覧がでます。
php@7.2 php@7.3 php@7.47.3をインストールします。
$ brew install php@7.3わたしの場合はインストールにあたってはエラーは出なかったのですが、(もしかしたら、最初に試したphpenvのエラー解消のための
brew
コマンドがうまいこと作用したのかもしれない)
参考サイトのようなIf you need to have php@7.3 first in your PATH run: echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profileという指示も出なかったです。が、
$ echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile $ echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile$ brew services start phpとやると、
Error: Formula `php` is not installed.と怒られたので、
$ brew services start php@7.3ってしてあげたら、いけました。
ターミナル再起動後、php -v
たたくと、PHP 7.3.20に〜?無事に新規PJの
php spark serve
も通って、万事ハッピーに思えたのです。が。mysqlでopensslのエラーが発生
さて、別PJ(rails)で、
mysql.server start
たたいたところ、
opensslのlibsslが無いよ―っていうエラーで起動しない。こちら、今回のphpのバージョンアップが直接的な影響かは定かではないですが、
以前も一度brew経由でライブラリ入れたあとになったことがあったので、
またか〜って感じでした。https://qiita.com/hirotech/items/d16988b79f7673fa2d31
https://qiita.com/yamazaki8934/items/48e65850873f3ecbee26わたしの場合、1.0.2sがほしいよ―って怒られていて、
上記の参考記事の方たちは古いバージョンに切り替えて解決しているのですが、
私の場合、以前brew経由でopensslをインストールしなおした際に、
最新の1.1系のみになってしまったのですよね。
(今はbrew経由だと1.0系はサポート終了してて出てこない)あ〜1.0.2sを入れてあげねば〜と思い、
たどり着いたアーカイブからインストール試みたのですが、
make
コマンド失敗するし、そもそもサポート外のものを入れるために頑張るこの感じ・・
逆にmysqlを再インストールしたほうがいいんじゃないか、
と半ば諦めつつも、下記の記事を発見。
brew upgrade
かけたら、mysqlのマイナーアップデートが走り〜・・・
終了後、ためしにmysql.server start
たたいたら、通った。神か!というわけで私の場合、
1.0.0系を意図的にインストールはしなかったけど、無事起動するようになりました。
upgradeで内部のリンクをよしなに処理してくれたのだろうか。。以上、私的メモでした。
- 投稿日:2020-08-05T18:53:12+09:00
SQLのクエリが重すぎた話
概要
大量のレコードを扱うテーブルを表示するときに、クエリの発行の仕方が悪くてクエリの量がとんでもなく多くなってしまったので、そのときの解決方法を書いておきます。
本題
上記のようなテーブルをデータベースから取得して表示する場合、
A~Eそれぞれに02などの値が紐づくのであれば、
行ごとに値をとってこようとするとA~E,F,G,...と増えていくにつれて発行するクエリはそれだけ増えていきます。
そこで、group_by
などを使い、aa,bb,cc,dd,ee,ffの列ごとにクエリを発行するようにすれば、
レコード自体が増えても影響は少なくできます。まとめ
こういった問題はn+1問題とも呼ばれているようですが、自分は知りませんでした。
駆け出しのうちはそもそも知らないことが多いので、実装方法はときどき人に聞いた方がよさそうです。
- 投稿日:2020-08-05T00:04:33+09:00
MacにhomebrewでインストールしたMySQLを停止する
homebrewでインストールした mysqldサービスは、 KeepAlive = true となってるため、何度消しても起動されるため、停止できるようにしたいときは、以下のように更新する
vim ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist<key>KeepAlive</key> <false/>再読み込みする
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plist launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mariadb.plistで、
mysql.server stop
をする