LoginSignup
5
0

More than 3 years have passed since last update.

【Rails/AWS】RDSのMySQLに繋がらないエラーの考えられる原因(database.yml)

Posted at

はじめに

本記事は、RailsアプリをAWSにデプロイした際に発生する可能性のある
MySQLに繋がらないという事象に対する原因例を紹介します。
原因はかなり初歩的な原因でしたが、筆者はこのエラー原因が特定できずとても苦労したため、
今後同じエラーに遭遇した方の助けになれば幸いです。

開発環境

  • Ruby 2.5.1
  • Rails 5.2.4.4
  • AWS(EC2, RDS)
  • MySQL(RDS) 5.6.48

前提条件

  • RailsアプリをEC2のWebサーバー上にgitクローン済み。
  • 基本的な設定は完了済みで、rake db:create RAILS_ENV=productionのコマンドを実行する手前の状態。
  • RDSのDBインスタンスを作成済み。
  • Railsのdatabase.ymlは下記の内容です。
database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

production:
  <<: *default
  database: データベース名
  host: <%= ENV['DATABASE_HOST_PRODUCTION'] %>
  username: <%= ENV['DATABASE_USER_NAME_PRODUCTION'] %>
  password: <%= ENV['DATABASE_PASSWORD_PRODUCTION'] %>

エラー内容

以下のコマンドだとRDSのMySQLに繋がったのですが・・・・

[ec2-user@ip-10-0-1-10 アプリのディレクトリ]$ mysql -h RDSのエンドポイント -u root -P 3306 -p

以下のコマンドだと繋がらず、MySQLに繋がらないというエラーが出ました。

[ec2-user@ip-10-0-1-10 アプリのディレクトリ]$ rake db:create RAILS_ENV=production
Can't connect to MySQL server on '10.0.1.10' (111)
Couldn't create 'データベース名' database. Please check your configuration.
rake aborted!
Mysql2::Error::ConnectionError: Can't connect to MySQL server on '10.0.1.10' (111)

Tasks: TOP => db:create
(See full trace by running task with --trace)

原因/解決策

当初はホスト名の設定ができていなかったので、エンドポイントを環境変数に入れて修正したのですが、
mysqlコマンドだと繋がるのにrakeコマンドだと繋がらないという謎の現象が発生しました。
いろいろ調べたところ、MySQLのパスワードにパスワードに"#"が入っていることが原因でした。
YAMLファイルはコメントアウトの記法が#ということで、パスワードに"#"が入っているとコメントされてしまいます。
パスワードを変更したら無事rakeコマンドが通りました。
みなさんお気を付けください。

まとめ

MySQLのパスワードに"#'を含めるのは良くない。

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