Shimpei Wakida's Blog

日々の学びをゆるりと.

MySQL5.6→5.7のアップデートで「Library not loaded: libmysqlclient.18.dylib (LoadError)」に対応した

概要

RailsアプリのローカルDBで使用しているMySQLバージョンを5.6から5.7に上げる時ハマったので備忘録。

バージョン

手順

MySQLのバージョンを上げる

brew uninstall mysql@5.6
brew install mysql@5.7
mysql.server restart

などを行った後、

bin/rails db

でDB接続を試みると、

(中略)
dlopen(/Users/{ユーザー名}/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 0x0009): Library not loaded: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib (LoadError)
  Referenced from: /Users/{ユーザー名}/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
  Reason: tried: '/usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib' (no such file), '/usr/local/lib/libmysqlclient.18.dylib' (no such file), '/usr/lib/libmysqlclient.18.dylib' (no such file) - /Users/{ユーザー名}/.rbenv/versions/2.7.5/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle

のエラー発生。

Reason: tried: '/usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib' (no such file) と言われても、もうMySQL5.6はアンインストールしてるんですが?という感じ。

ファイルも、当然存在しない。

$ ls /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib

ls: /usr/local/opt/mysql@5.6/lib/libmysqlclient.18.dylib: No such file or directory

MySQLの場所を確認

brew info mysql@5.7

すると、以下のようなものが出力される。

==> mysql@5.7: stable 5.7.39 (bottled) [keg-only]
Open source relational database management system
https://dev.mysql.com/doc/refman/5.7/en/
/usr/local/Cellar/mysql@5.7/5.7.39 (320 files, 233.6MB)
  Poured from bottle on 2022-10-27 at 23:41:25
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/mysql@5.7.rb
License: GPL-2.0-only
==> Dependencies
(中略)

mysql@5.7はどこにいるかというと、ここ/usr/local/Cellar/mysql@5.7/5.7.39

シンボリックリンク貼る

sudo ln -s /usr/local/Cellar/mysql@5.7/5.7.39/lib/libmysqlclient.dylib /usr/local/lib/libmysqlclient.18.dylib

これで解決した。