2
0

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をアップデートしたらlibmysqlclient.so.20: cannot open shared object file

Last updated at Posted at 2023-11-10

概要

MySQLクライアントを5.7系から、8.0系にアップデートしたところ、Railsが以下のようなエラーが発生して起動しなくなった。

libmysqlclient.so.20: cannot open shared object file: No such file or directory - /dir/shared/bundle/ruby/2.7.0/gems/mysql2-0.5.5/lib/mysql2/mysql2.so (LoadError)

環境

Amazon Linux 2
Ruby 2.7
Ruby On Rails 6.1.3.1
MySQL (gem mysql2 使用)
MySQL クライアントライブラリは yum で管理

以下の場所に libmysqlclient.so.20 が無い

$ ls -l /usr/lib64/mysql/
合計 20304
-rw-r--r-- 1 root root 9668352 10月 13 00:33 libmysqlclient.a
lrwxrwxrwx 1 root root      20 10月 25 09:45 libmysqlclient.so -> libmysqlclient.so.21
lrwxrwxrwx 1 root root      24 10月 25 09:45 libmysqlclient.so.18 -> libmysqlclient.so.18.1.0
-rwxr-xr-x 1 root root 3546456 10月 13 00:33 libmysqlclient.so.18.1.0
lrwxrwxrwx 1 root root      25 10月 25 09:45 libmysqlclient.so.21 -> libmysqlclient.so.21.2.35
-rwxr-xr-x 1 root root 7545032 10月 13 00:33 libmysqlclient.so.21.2.35
lrwxrwxrwx 1 root root      20 10月 25 09:45 libmysqlclient_r.so.18 -> libmysqlclient.so.18
lrwxrwxrwx 1 root root      24 10月 25 09:45 libmysqlclient_r.so.18.1.0 -> libmysqlclient.so.18.1.0
-rw-r--r-- 1 root root   23046 10月 13 00:33 libmysqlservices.a
drwxr-xr-x 2 root root     125 10月 25 09:45 plugin

MySQL クライアントバージョン

$ yum list mysql-community-client.x86_64
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
293 packages excluded due to repository priority protections
Installed Packages
mysql-community-client.x86_64    8.0.35-1.el7   @mysql80-community

対応

rm /dir/shared/bundle/ruby/2.7.0/specifications/mysql2-0.5.5.gemspec

cd /dir/current/
bundle install

↓の mysql2.so のバイナリが再生成される
/dir/shared/bundle/ruby/2.7.0/gems/mysql2-0.5.5/lib/mysql2/mysql2.so

原因

mysql2 gem を bundle install した際に生成される mysql2.so は、その時入っている MySQL クライアントのバイナリファイルのパス(libmysqlclient)を参照しているようで、MySQL クライアントをアップデートしたことによって、それまで参照していたバイナリファイルの名前が変わってしまい参照できなくなった。
一度gemspecファイルを消してbundle installし直すことで、その時のMySQL クライアントのバイナリファイルを参照するmysql.soファイルが生成され、直った。

参考

2
0
0

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?