MySQL 5.5から5.7へのバージョンアップと、libmysqlclient.so.18: cannot open shared object file: No such file or directoryの解消


はじめに

前回の記事 Cloud9でRuby on Railsの環境構築 ~インストールから起動まで~ で「Yay! You’re on Rails!」を表示し、最低限の環境構築までは完了したが、MySQLのバージョンが古かったためバージョンアップをすることに。

その過程でいくつかエラーが発生したので、備忘録のためにカキカキしていきます。

目標

MySQL 5.5 からMySQL 5.7にアップデートし、「Yay! You’re on Rails!」を表示させる

環境

Amazon linux
ruby 2.6.3
Rails 6.0.3.4
MySql 5.5.62

やっていきましょう

MySQLのバージョンアップ

まずはバージョンを確認しておきます。

$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.62-log MySQL Community Server (GPL)
~略~

そうしたら"yum"を使ってMySQL関連のモジュールをアンインストール。
その後使用するバージョンを指定して、MySQLのモジュールをインストールします。

$ yum remove mysql*
$ yum install mysql57 mysql57-devel mysql57-server

ここで一度バージョンを確認してみます。

$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket'/var/lib/mysql/mysql.sock' (2)

エラーが発生。前回の記事と同じ内容です。

socketファイルが無いためMySQLに接続できていないので、MySQLを再起動してsoketファイルを自動作成させます。
その後もう一度バージョンを確認。

$ sudo /etc/init.d/mysqld restart
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)

これでうまく5.7.31がインストールできました。

サーバー起動

サーバーを起動して接続できるか確認します。

$ rails s
~略~
libmysqlclient.so.18: cannot open shared object file: No such file or directory
~略~

エラーです。
ディレクトリとかファイルがないから開けませんって言われています。

今回はDBにMySQLを使用するため、プロジェクト作成時に"-d mysql"オプションを追加しました(前回の記事参照)。
この時にmysql2というgemがインストールされたのですが、これを再インストールすれば解消されるっぽい。

そんなわけでmysql2をインストールしなおします。

$ gem uninstall mysql2
$ gem install mysql2

これで起動してみましょう。

$ rails s
Mysql2::Error::ConnectionError
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

またsoketファイルか・・・
MySQLを再起動してから再びサーバーを起動。

$ sudo /etc/init.d/mysqld restart
$ rails s

成功しました。