新しいデバイスのセットアップなど、そう頻繁にやる作業ではないはずなのに、不思議と何度も遭遇する mysql2 gem のインストールエラー。毎回すんなり通らず、毎回調べ直している気がするので、さすがに不毛だと思いメモしておきます。
mysql2のインストールエラー
典型的なエラーはこれです。
ld: library not found for -lssl
HomebrewのOpenSSLパスをmysql2のビルドが見つけられていません。bundle config で明示的に指定すれば通ります。
bundle config --local build.mysql2 \
"--with-ldflags=-L/usr/local/opt/openssl/lib \
--with-cppflags=-I/usr/local/opt/openssl/include"
ただし Intel MacとApple Silicon(M1以降)でHomebrewのパスが違います 。
- Intel:
/usr/local/opt/ - M1以降:
/opt/homebrew/
過去の解決記録をそのまま貼っても動かないことがあるので、自分の環境に合わせてパスを読み替える必要があります。
Docker上のMySQLに接続できない
mysql2を乗り越えた次の罠がDocker上のMySQLへの接続でした。
- Docker Composeで立ち上げたMySQLコンテナに、ローカルの
mysqlコマンドから接続できない - コンテナ内からは通る。phpMyAdminも通る
docker psで重複起動なし、ポートマッピングも3306で正しい
原因は Dockerとは無関係にローカルのmysqldが起動していた ことでした。
COMMAND PID USER FD TYPE ...
mysqld 6618 username 23u IPv4 ... TCP localhost:mysql (LISTEN)
com.docke 91253 username 84u IPv6 ... TCP *:mysql (LISTEN)
lsof -i :3306 で確認すると、ポート3306をDockerとローカルのmysqldが取り合っていました。「docker ps で確認したから大丈夫」という先入観にやられた形です。
このときはローカルのmysqldプロセスを止めて解決しました。Docker環境でMySQLを使うなら、ローカル側のmysqldが起動していないか lsof -i :3306 で確認するのが確実です。


