質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1062閲覧

[Rails]EC2上のRailsから別サブネット内のRDSに"rails db:create"する際に出る"socket '/tmp/mysql.sock' (2)"エラーが解決できない

hajsu00

総合スコア151

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/05/08 07:57

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

1$ rails db:create 2 3Running via Spring preloader in process 17326 4Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 5Couldn't create 'myapp_development' database. Please check your configuration. 6rake aborted! 7ActiveRecord::ConnectionNotEstablished: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 8<internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' 9<internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' 10-e:1:in `<main>' 11 12Caused by: 13Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 14<internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' 15<internal:/home/myapp/.rbenv/versions/3.0.3/lib/ruby/3.0.0/rubygems/core_ext/kernel_require.rb>:85:in `require' 16-e:1:in `<main>' 17Tasks: TOP => db:create 18(See full trace by running task with --trace)

src/config/database.yml

yml

1default: &default 2 adapter: mysql2 3 encoding: utf8mb4 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: <%= ENV['DATABASE_PASSWORD'] %> 7 host: localhost 8 socket: /tmp/mysql.sock 9development: 10 <<: *default 11 database: myapp_development 12test: 13 <<: *default 14 database: myapp_test 15production: 16 <<: *default 17 database: myapp_production 18 username: <%= Rails.application.credentials.db[:user_name] %> 19 password: <%= Rails.application.credentials.db[:password] %> 20 host: <%= Rails.application.credentials.db[:endpoint] %> 21 pool: 20 22 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

お手数お掛けしますが、ご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

RDSに対してどのようにmysqldの操作をすれば良いのかがわかりません。

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!

development 環境で実行されたことになっているようですが、環境変数 RAILS_ENV は、どうなっていますか?

また、

rails db:create RAILS_ENV=production

とした場合はどうなりますか?

投稿2022/05/08 08:44

編集2022/05/08 08:46
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hajsu00

2022/05/08 08:50

ご指摘の通り、環境がdevelopmentになっているのが原因でした。 rails db:create RAILS_ENV=production を実行したところ、無事にデータベースの作成ができました。 初歩の初歩ですが、本当に気が付かずに別の設定を何周も見直していました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問