28
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MySQL起動エラーの対処の仕方【Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)】

Last updated at Posted at 2020-10-10

前回

herokuを使ってデプロイ中に、急にMySQLとの接続が出来なくなった。
原因は、恐らくMySQLのバージョンが、Homebrew で 8.0.をインストールしてしまい MySQLが ver8.0 にアップデートされていた事が原因(だと思う)
奮闘の上、ようやくMySQLの起動に成功した。これでようやくrails sでアプリを起動出来ると思ったが、また新たなエラーが出た。

これは前回の記事の続きになります。
MySQL起動エラーの対処の仕方【Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)】


エラー内容

rails sが上手く行かず、ターミナル上に出たエラー文がこちら

/Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.7/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': dlopen(/Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)
  Referenced from: /Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/kawaiyasuhiro/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle

重要な所はここ!
Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)

要は、シンボリックリンクにて/usr/local/opt/mysql/lib/libmysqlclient.21.dylibファイルが見つからない為、エラーが起きている模様。

シンボリックリンクとは、UNIX系のOSにおいて、ファイルやフォルダに対する注文を代わりに受け付けて本来のファイルに中継するのを役目としている仲介役みたいなものです。

これがないから繋がらないっと言っているようです。

なので、/usr/local/opt/mysql/libの中身を下記のコマンドで確認してみましょう。
% ls -l /usr/local/opt/mysql/lib/
すると・・・
あれ!?
ls: /usr/local/opt/mysql/lib: No such file or directory
ファイルがない??
仕方ない、細かく確認してみよう。
% cd /usr/local/opt/
optフォルダに移行したので
% ls
mysql@5.6ってファルダがあった
% cd mysql@5.6
mysql@5.6フォルダに移行したので
% ls
そしたら下記の結果が出た

total 48000
-rw-r--r--   1 hoge  staff   3353852 10  8 05:11 libmysqlclient.18.dylib
-r--r--r--   1 hoge  staff   3866872 11 27  2019 libmysqlclient.a
lrwxr-xr-x   1 hoge  staff        23 11 27  2019 libmysqlclient.dylib -> libmysqlclient.18.dylib
lrwxr-xr-x   1 hoge  staff        23 11 27  2019 libmysqlclient_r.18.dylib -> libmysqlclient.18.dylib
lrwxr-xr-x   1 hoge  staff        16 11 27  2019 libmysqlclient_r.a -> libmysqlclient.a
lrwxr-xr-x   1 hoge  staff        20 11 27  2019 libmysqlclient_r.dylib -> libmysqlclient.dylib
-r--r--r--   1 hoge  staff  17344696 11 27  2019 libmysqld.a
-r--r--r--   1 hoge  staff      3472 11 27  2019 libmysqlservices.a
drwxr-xr-x  21 hoge  staff       672 11 27  2019 plugin

libmysqlclient.21.dylibがなく、代わりにlibmysqlclient.18.dylibがある。

少し調べたところ、5.7 はlibmysqlclient.20.dylib8.0 はlibmysqlclient.21.dylibを使用しているらしいということが分かった。
そして、5.6 はlibmysqlclient.18.dylibを使うみたいだ。

??

上記の理論で有れば ver 5.6 はlibmysqlclient.18.dylibが有ればいいのではないか?

他に問題あるのか?


bundle doctor

他の問題を解決する為に、
bundle doctorを使ってGemfileとgem環境をチェックしてみた。

% bundle doctor
(略)
The following gems are missing OS dependencies:
 * mysql2: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib

エラー内容を確認すると、The following gems are missing OS dependencies:と、
以下のgemたちは、OSへの依存関係がありません、と出ています。

という事で、ここは一先ず、出ているgemsを1つ1つアンインストールしていきます。
今回は一つしか出てこなかったですが、複数出る場合もあります。
やり方は、bundle exec gem uninstall [gem名]です。

なので下記コマンドを打ち込みます。

% bundle exec gem uninstall mysql2
Successfully uninstalled mysql2-0.5.3

最下部に、Successfully uninstalled [gem名] と表示されればアンインストール完了です!


再びbundle doctor

% bundle doctor
(略)
Install missing gems with `bundle install`

とエラーが出るので、bundle installをします。


そして、本当に問題がないか再度bundle doctor

$ bundle doctor
(略)
No issues found with the installed bundle

これで解決!インストールされたbundleに問題はありませんっと
表示された。

なので、rails sでアプリを起動してみると・・・・・

上手くいった!!
ようやくこれで、全てのMySQLエラーの解決です。長がった。

まぁ、正確にはこのエラー解決するのにMySQLを一度アンインストールしているので、
データベースの作成とマイグレーションの実行をしないとダメですね(笑)

なので一応記載しておきます。

rails db:create
rails db:migrate

これで本当に終了です!



備考 - 結局、 Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError) のエラーは解決の仕方は、これで良かったのか?? 他の記事を見てみても同じやり方の記事が多くあったし、事実解決しているので大丈夫かと思うけど・・・

詳しく知っている方が、もしいらっしゃったら教えてください!

そもそも、根本的な問題としてMySQLのバージョンが、8.0.にアップデートされた原因が正直分からない・・・
プログラミング・・・奥が深すぎる

28
20
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?