Rails Diary

プログラミングの学習記録です。

MySQLメモ

M1 Mac MySQLのインストール

課題に際してbundle installしようとするとエラーが出て上手くいかなかったため、調べた自分用メモです。間違った記載が多くあると思われるので、あまり参考にしない方が良いかも知れないです。

※ 記事を参考にコマンド実行する前に記事の鮮度・信頼性、本当に自分と同じ環境なのか考えてから実行するようにすること。

bundle install時に下記エラーが出ました。

34 warnings generated.
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in
/Users/ユーザー名.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3 for
inspection.
Results logged to
/Users/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/extensions/-darwin-20/2.6.0/mysql2-0.5.3/gem_make.out

An error occurred while installing mysql2 (0.5.3), and Bundler cannot
continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'`
succeeds before bundling.

An error occurred while installing mysql2 (0.5.3), M1 Mac

↑こちらのブログを参考にインストールすることができました。

どうやら、デフォルトで使われているSSLに互換性がないためgem installで探し出すことができないとかなんとか・・

試したこと

  1. 互換性のあるopensslというものに変更
  2. シェルにopensslのパスを通して、反映させる
  3. bundle configのパスを変更
  4. ライブラリのパスを変更

  5. 使用されているsslを確認

$ openssl version
LibreSSL 2.8.3
  • opensslのパス確認
$ brew --prefix openssl

bundle installがmysql2でコケるときに試すやつ

$ brew install openssl
$ echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc
$ bundle config --local build.mysql2 "--with-ldflags=-L/opt/homebrew/opt/openssl@3/lib"
$ export LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/Cellar/zstd/1.5.2/lib:/opt/homebrew/Cellar/openssl@3/1.1.1m/lib/

これでbundle installできるようにはなったけど、正直良く分かってない。。🥲

OpenSSLとは

インターネット上で標準的に利用される暗号通信プロトコルであるSSLおよびTLSの機能を実装したプログラムの一つ。他のソフトウェアに組み込んで使用するライブラリ(プログラム部品)となっており、オープンソースソフトウェアとして公開されている。OpenSSLとは - IT用語辞典 e-Words

まずSSL(Secure Sockets Layer...『安全な受け口』層)とは

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典より

通信プロトコル(通信する際に双方で足並みを揃えるための約束事)の一つ。
インターネット上でやり取りする情報を暗号化して送受信するための仕組み。

SSLは、公開鍵暗号方式で共通鍵の受け渡しを行い、あとは受け渡した共通鍵を使って共通鍵暗号方式(秘密鍵暗号方式)でやり取りすることで、通信の安全性を高める仕組みです。

公開鍵暗号方式ってどんなもの?

  1. クライアントがサーバに挨拶する。
    🙋🏻‍♂️ < Hi! 🤖

  2. サーバはクライアントにサーバ証明書(自己紹介)を送る。このサーバ証明書の中にはサーバの公開鍵(「これを使って暗号化して下さい」の鍵)が入っている。
    💁🏻‍♂️ サーバ証明書📝🗝送る >🤖

  3. クライアントはサーバ証明書を送ってきたサーバが本物か確かめるために、認証局に問い合わせる。🏢< 本物です。 アレは本物ですか? >🤷🏻‍♂️ 🤖

  4. サーバが本物だった場合、サーバと秘密の会話をするためのルールである共通鍵を作成し、先ほど受け取ったサーバの公開鍵に従って共通鍵を暗号化する。
    📄+🗝🙆🏻‍♂️(暗号化) 🔐✨

  5. 暗号化された共通鍵(暗号化された共通ルール)をサーバに送る。
    💁🏻‍♂️< 共通鍵渡すね 🔐🤖どうも

  6. サーバは、暗号化を解除する鍵であるサーバの秘密鍵を使って、暗号化された共通鍵を復号する。 🤖🔑 🔓✨(復号)

これにより、クライアントもサーバもやり取りするための共通鍵(ルール)を手に入れた。あとはこのルール(共通鍵)を使ってやり取りすることで第三者にやり取りを盗み見られたとしても、暗号化されているので何が書いてあるのか分からない。これが共通暗号方式(秘密鍵暗号方式)でやり取りをするということ。
🙆🏻‍♂️🔐✨⇄🤖🔐✨ ❌👿(くそぉ...)

TLSとは

SSLが1.0→2.0→3.0までバージョンアップし、次のバージョンアップでSSL4.0になると思いきや「TLS1.0」になったらしい。SSLの後継。(厳密には違うらしい)

このあとrails db:createしようとするも上手くいかない

これに関してはusernameとpasswordが記載されていないことが原因でした。

各自の環境に合わせてusernameとpasswordを修正するように指示があったので、初期設定のrootログインをしてみることに。

MySQLのデフォルトパスワードを確認する - Qiita

$ mysql -u root
パスワードを設定する
mysql> set password for root@localhost='新しいパスワード';
Query OK, 0 rows affected (0.00 sec)
MySQLにログインする
$ mysql -u root -p

よく使うMySQLコマンド&構文集 - Qiita