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が入ってない?
ググると、どうやら AWSのLinuxだと 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
確かに入ってる。
削除する。
$ 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
完了しました!
削除完了。
一応確認する。
何も出てこない。ということは削除できてる。
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
して、中に
を追記する。
2. mysqlを再起動
$ sudo service mysqld restart
3. mysqlにrootで入って、rootのパスワードをnullに設定する。
4. 権限スキップ設定を削除する
$ sudo vi etc/my.cnf
を削除。
5. mysqlを再起動
$ sudo service mysqld restart
6. alterでパスワードの再設定
で、mysqlに入る。
ここで、参考にしていた上記サイトのコマンド
だと、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)
というエラーが。。
ググってみると、どうやら手動でインストールしたmysqlとRubyの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