20200805のMySQLに関する記事は3件です。

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でやってみました。

macOS Mojaveで最新のPHP(7.3)にVersion upする

homebrewは入っていたので

$ brew search php@7

と叩くと、インストールできる一覧がでます。

php@7.2                    php@7.3                   php@7.4

7.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を再インストールしたほうがいいんじゃないか、
と半ば諦めつつも、下記の記事を発見。

opensslの読み込み不具合でMySQLが起動しない時の対処【Homebrew】

brew upgradeかけたら、mysqlのマイナーアップデートが走り〜・・・
終了後、ためしにmysql.server startたたいたら、通った。神か!

というわけで私の場合、
1.0.0系を意図的にインストールはしなかったけど、無事起動するようになりました。
upgradeで内部のリンクをよしなに処理してくれたのだろうか。。

以上、私的メモでした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SQLのクエリが重すぎた話

概要

大量のレコードを扱うテーブルを表示するときに、クエリの発行の仕方が悪くてクエリの量がとんでもなく多くなってしまったので、そのときの解決方法を書いておきます。

本題

d4b2e4b5c79fe9b78a580e4fe6822a65.png
上記のようなテーブルをデータベースから取得して表示する場合、
A~Eそれぞれに02などの値が紐づくのであれば、
行ごとに値をとってこようとするとA~E,F,G,...と増えていくにつれて発行するクエリはそれだけ増えていきます。
そこで、group_byなどを使い、aa,bb,cc,dd,ee,ffの列ごとにクエリを発行するようにすれば、
レコード自体が増えても影響は少なくできます。

まとめ

こういった問題はn+1問題とも呼ばれているようですが、自分は知りませんでした。
駆け出しのうちはそもそも知らないことが多いので、実装方法はときどき人に聞いた方がよさそうです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 をする

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む