Help us understand the problem. What is going on with this article?

【AWS】EC2 MySQL パスワードエラーを解決(Rails アプリデプロイ時)

はじめに

(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
こちらの記事を参考にさせていただき、Rails のオリジナルアプリをAWSを利用しデプロイしようと試みました。

すると、こちらの記事
(デプロイ編②)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
デプロイ編②の「MySQLの設定」でかなり躓いたのでエラー内容と解決した方法を記述する。

エラー内容から解決までの簡単な流れ

ターミナルでEC2インスタンスにログインし、MySQLを起動した状態で

  1. rake db:create RAILS_ENV=productionを実行 → 「パスワードがないから、アクセスできないよ」とエラーがでる
  2. コマンドを実行しパスワードを確認する
  3. 確認したパスワードを database.yml に記述する
  4. 再度rake db:create RAILS_ENV=productionを実行 → 「パスワードが有効期限切れだよ」とエラーがでる
  5. パスワードを変更する
  6. 変更したパスワードを database.yml に記述する
  7. rake db:create RAILS_ENV=production 実行できた!!

以下でもう少し詳細に説明する

解決のためにやったことを説明

1. rake db:create RAILS_ENV=productionを実行

$ rake db:create RAILS_ENV=production
# エラー文
Access denied for user 'root'@'localhost' (using password: NO)

「パスワードがないからアクセスできないよ」と拒否される。

確かに database.yml の production環境記述 password の部分は空欄になっていた

database.yml
production:
  <<: *default
  database: thankshabit_production
  username: root
  password:           # ←ここが空欄

2. コマンドを実行しパスワードを確認する

パスワードがわからないので、こちらのコマンドを実行しパスワードを確認する

$ sudo cat /var/log/mysqld.log | grep 'temporary password'
[Note] A temporary password is generated for root@localhost: XXXXXX

このコマンドを実行し表示された最後の部分「XXXXX」がパスワード。
この部分を database.yml に記述する

3. 確認したパスワードを database.yml に記述する

アプリのディレクトリにいる状態で

$ vi config/database.yml

を実行し、確認したパスワードを database.yml に記載する

database.yml
production:
  <<: *default
  database: thankshabit_production
  username: root
  password: XXXXX # ←ここに記述 

4. 再度rake db:create RAILS_ENV=productionを実行

再度実行したらまた別のエラーがでる

$ rake db:create RAILS_ENV=production
# エラー文
Mysql2::Error: Your password has expired. To log in you must change it using a client that supports expired passwords.

「パスワードが有効期限切れだから、変更する必要がある」と言われている。

5. パスワードを変更する

コマンドを実行し、パスワードを変更する

$ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none): 

Enter を押す

OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] y

パスワードを設定するかどうか聞かれているため、「y」+「Enter」

New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

新しいパスワードを確認含めて2回入力する
ここで注意なのですが、このパスワードの文字制約がかなり厳しい
筆者はこちらなどを利用して制約をクリアするパスワードを設定した。

Remove anonymous users? [Y/n] y
 ... Success!

Disallow root login remotely? [Y/n] y
 ... Success!

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] y
 ... Success!
Cleaning up...

全てに「y」+「Enter」で返していく

これでパスワードの新規設定が完了!!

6. 変更後のパスワードを database.yml に記述する

アプリのディレクトリにいる状態で

$ vi config/database.yml

を実行し、先ほど新規に設定したパスワードを記述し直す

database.yml
production:
  <<: *default
  database: thankshabit_production
  username: root
  password: XXXXX # ←ここに新パスワードを記述し直す 

7. rake db:create RAILS_ENV=production 実行

$ rake db:create RAILS_ENV=production 

無事実行できた!!

最後に

無事にこのつまずきを乗り越えてAWSでデプロイできました。色々な記事などを参考にさせていただきRailsアプリを無事にデプロイできました。
DBについてもネットワークやインフラ面についても理解はまだ浅いですが非常に勉強になりました。

参考にさせていただいた記事、サイトには本当に感謝しかないです。
ありがとうございました。

今回エラー解決に参考にさせていただいた記事↓↓ ありがとうございました!!

tkmd35
アプリ開発会社勤務の初心者エンジニア。 スーパープログラマーになりたい。 Swift / Java / Ruby 学習中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした