EC2上のRailsから、そのRailsとは別のプライベートサブネット内にあるRDS(MySQL)にrails db:create
の実行を考えています。
しかし、お馴染みのCan't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
が出てしまい、ローカル環境の時とは違い長時間解決できずにいます。
Rails <=> MySQLの本番環境時の設定について、間違っていないかご教示いただけないでしょうか。
前提事項
・EC2 => RDSへは、$mysql -h <RDSのエンドポイント> -u <ユーザー名> -p
のコマンドで接続に成功しています。
・socket '/tmp/mysql.sock' (2)
=> socket '/tmp/mysql.sock' (13)
=> socket '/tmp/mysql.sock' (111)
と推移しています。
・上記より、mysqldが動いていないと考えているのですが、RDSに対してどのようにmysqldの操作をすれば良いのかがわかりません。設定内容を記載させていただきますので、間違い等あればご教示いただきたいです。
開発環境
・macOS Monterey v12.1
・ruby v3.0.3
・Rails v6.1.4.4
・MySQL 8.0.28
インフラ構成図
関連コード
エラー文
bash
$ rails db:create Running via Spring preloader in process 17326 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) Couldn't create 'myapp_development' database. Please check your configuration. rake aborted! ActiveRecord::ConnectionNotEstablished: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) <internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' <internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' -e:1:in `<main>' Caused by: Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) <internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' <internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' -e:1:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)
src/config/database.yml
yml
default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV['DATABASE_PASSWORD'] %> host: localhost socket: /tmp/mysql.sock development: <<: *default database: myapp_development test: <<: *default database: myapp_test production: <<: *default database: myapp_production username: <%= Rails.application.credentials.db[:user_name] %> password: <%= Rails.application.credentials.db[:password] %> host: <%= Rails.application.credentials.db[:endpoint] %> pool: 20 port: 3306
production環境のユーザー名、ホスト名、パスワードは何度確認しても間違っていませんんでした。
また、EC2内からrails c
で$Rails.application.credentials.db[:user_name]
等を実行したところ、きちんと値が取得できていました。
etc/my.cnf
[mysqld] port=3306 socket=/tmp/mysql.sock [client] socket=/tmp/mysql.sock [mysqldump] quick [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
お手数お掛けしますが、ご教示いただけると幸いです。
まだ回答がついていません
会員登録して回答してみよう