fluid_27’s blog

勉強した内容をアウトプットするためのブログ

AWS EC2でmariaDBを削除してMySQLをインストールする。

https://hackmd.io/4_1NYUTBSaSsOC8cur7WhA?view

を参考に今回はNginx + unicorn + MySQLの構成でデプロイしようとした際にハマったmariaDBを削除してMySQLをインストールする。という流れを備忘録として残す。

 

 

参考サイトの手順を見ながら、EC2上で一括でインストールする。

$ sudo yum -y install git make gcc-c++ patch openssl-devel libyaml-devel libffi-devel libicu-devel libxml2 libxslt libxml2-devel libxslt-devel zlib-devel readline-devel mysql mysql-server mysql-devel ImageMagick ImageMagick-devel epel-release sqlite sqlite-devel

 

mysqlをスタート

$ sudo service mysqld start

Redirecting to /bin/systemctl start mysqld.service

Failed to start mysqld.service: Unit not found.

 

ん?

mysqldが入ってない?

ググると、どうやら AWSLinuxだと mariaDBが代わりに入っているから、というのが原因みたい。

 

mariaDBを削除

下記サイトを参考にmariaDBを削除し、mysqlをインストールしました。

https://qiita.com/miriwo/items/e7afd5e1ae0de94f27c2

https://qiita.com/shun0211/items/21871c82d385648b4bae

https://qiita.com/miriwo/items/eb09c065ee9bb7e8fe06

 

まず、mariaDBが入ってることを確認。

$ yum list installed | grep mariadb

mariadb.x86_64                      1:5.5.68-1.amzn2                 @amzn2-core

mariadb-devel.x86_64                1:5.5.68-1.amzn2                 @amzn2-core

mariadb-libs.x86_64                 1:5.5.68-1.amzn2                 installed 

確かに入ってる。

 

削除する。

$ sudo yum remove mariadb-libs

読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd

依存性の解決をしています

--> トランザクションの確認を実行しています。

・・・(略)

削除しました:

  mariadb-libs.x86_64 1:5.5.68-1.amzn2                                           

 

依存性の削除をしました:

  mariadb.x86_64 1:5.5.68-1.amzn2        mariadb-devel.x86_64 1:5.5.68-1.amzn2   

  postfix.x86_64 2:2.10.1-6.amzn2.0.3   

 

完了しました!

 

削除完了。

一応確認する。

$ yum list installed | grep mariadb

何も出てこない。ということは削除できてる。

 

MySQLをインストール

改めてインストールする

$ sudo yum localinstall

$ sudo yum install --enablerepo=mysql80-community mysql-community-server

$ sudo yum install --enablerepo=mysql80-community mysql-community-devel 

の3つのコマンドでインストール。

 

確認する。

$ yum list installed | grep mysql

mysql-community-client.x86_64         8.0.25-1.el7                   @mysql80-community

mysql-community-client-plugins.x86_64 8.0.25-1.el7                   @mysql80-community

mysql-community-common.x86_64         8.0.25-1.el7                   @mysql80-community

mysql-community-devel.x86_64          8.0.25-1.el7                   @mysql80-community

mysql-community-libs.x86_64           8.0.25-1.el7                   @mysql80-community

mysql-community-server.x86_64         8.0.25-1.el7                   @mysql80-community

mysql80-community-release.noarch      el7-3                          installed 

できてる。

 

ログファイルを作成

$ sudo touch /var/log/mysqld.log

 

パスワードを設定

mysqlを起動

$ sudo service mysqld start

Redirecting to /bin/systemctl start mysqld.service

 

下記のコマンドは初めて見たのだが、参考サイトでそのように書いてあったので、とりあえずそのまま打ってみる。

$ sudo /usr/libexec/mysql55/mysqladmin -u root password 'xxxxxxxx'

sudo: /usr/libexec/mysql55/mysqladmin: コマンドが見つかりません 

できない。

ので、違う方法でパスワードを設定する。

 

mysqlのパスワード設定でググってみると、様々なコマンドが紹介されているが、自分の場合は結局下記サイトのでうまくいった。

https://rougeref.hatenablog.com/entry/2019/03/26/100754

 

1. 権限スキップを設定。

$ sudo vi etc/my.cnf

して、中に

skip-grant-tables 

を追記する。

 

2. mysqlを再起動

$ sudo service mysqld restart

 

3. mysqlにrootで入って、rootのパスワードをnullに設定する。
$ mysql -u root
mysql > update mysql.user set authentication_string=null where user='root';

 

4. 権限スキップ設定を削除する

$ sudo vi etc/my.cnf 

skip-grant-tables 

を削除。

 

5. mysqlを再起動

$ sudo service mysqld restart

 

6. alterでパスワードの再設定
mysql -u root

で、mysqlに入る。

 

ここで、参考にしていた上記サイトのコマンド

mysql> alter mysql.user 'root'@'localhost' identified by 'xxxxxxx' ;

だと、syntax errorで入らなかったので、再びググってみる。

結果、下記コマンドで設定できた。

mysql> ALTER USER 'root'@'localhost' identified BY 'xxxxxxxxx';

 

Query OK, 0 rows affected (0.00 sec)

mysql> exit

 

試しに入ってみる。

$ mysql -u root -p

Enter password:

$ 設定したパスーワードの入力

Welcome to the MySQL monitor.  Commands end with ; or \g. 

無事入れる。

 

$ bundle exec rails db:migrate RAILS_ENV=production

bundler: failed to load command: rails (/home/ec2-user/.rbenv/versions/2.6.2/bin/rails)

・・・(略)

/home/ec2-user/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bundler-2.2.16/lib/bundler/rubygems_integration.rb:362:in `block in replace_bin_path': can't find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile? (Gem::Exception) 

 

というエラーが。。

 

ググってみると、どうやら手動でインストールしたmysqlRubyのgemとして入れているmysql2の依存関係?が合わないことがエラーの原因みたい。

対処方法としては、いったんmysql2をgemfileから削除して、再び入れ直せば自動でバージョンの合うものを入れてくれるみたい。

$ gem uninstall mysql2

Successfully uninstalled mysql2-0.5.3

$ gem install mysql2

Fetching mysql2-0.5.3.gem

・・・(略)

1 gem installed 

で無事に解決しました。

 

その他参考サイト

https://tackeyy.com/blog/posts/fix-libmysqlclient-r-so-16-cannot-open