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

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

2598閲覧

本番環境のrails db:createができない。Mysql2::Error::ConnectionError

mokosamejima

総合スコア11

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

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

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/10/14 10:51

編集2021/10/14 12:01

概要

本番環境(aws/ec2)で,データベースを作りたいがMysqlのエラーが出る。

環境

ruby '2.6.5'
rails '6.0.0'

エラーメッセージ

行うコマンド

[ec2-user@ip-172-31-23-189 <リポジトリ名>]$rails db:create RAILS_ENV=production

エラーメッセージ

Access denied for user 'root'@'localhost' (using password: YES) Couldn't create 'rooad_production' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: YES) bin/rails:4:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)

自分で行ったこと

① MySQLにパスワードを設定しているかを確認。

$ mysql_secure_installation

②開発環境と本番環境のパスワード統一

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /tmp/mysql.sock development: <<: *default database: rooad_development # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: rooad_test # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # # Instead, provide the password as a unix environment variable when you boot # the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database # for a full rundown on how to provide these environment variables in a # production deployment. # # On Heroku and other platform providers, you may have a full connection URL # available as an environment variable. For example: # # DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" # # You can use this database configuration with: # # production: # url: <%= ENV['DATABASE_URL'] %> # production: <<: *default database: rooad_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock

③MySQLを再起動
作られてないので、再起動は無駄と思いますが念の為。

$ sudo systemctl restart mysqld.service Failed to restart mysqld.service: Unit not found. $ sudo mysql.server restart sudo: mysql.server: コマンドが見つかりません

④MySQLのrootユーザーのパスワードの確認

$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 37 Server version: 5.5.68-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

エラー解決に参考にした記事

https://qiita.com/naota7118/items/b62d71484e21d6739d68

socket: /var/lib/mysql/mysql.sockを消したら

[ec2-user@ip-172-31-35-186 road]$ rails db:create RAILS_ENV=production Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) Couldn't create 'rooad_production' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) bin/rails:4:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)

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

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

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

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

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

guest

回答2

0

ベストアンサー

Access denied for user 'root'@'localhost' (using password: YES) ということですから、Rails と mysqld は会話しています。(socketは正しい)
<%= ENV['DATABASE_PASSWORD'] %>
これが失敗しているのかも。ここ 一時的に パスワードを直書きして動くかどうか観てください。

投稿2021/10/14 13:19

winterboum

総合スコア23567

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

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

mokosamejima

2021/10/15 00:25

返信いただき、ありがとうございます! パスワード直書きでうまく起動しました。どうして直書きでなるのか分からないですけど、助かりました。 確か、githubに乗らないように<%= ENV['DATABASE_PASSWORD'] %>で書く必要があった気がするですが、この場合はどうすれば解決するのでしょうか? ($ env | grep DATABASE_PASSWORDで、パスワードが同じなのは確認済みです!) お手数ですが、教えていただいてと助かります!
winterboum

2021/10/15 00:46

直書きは原因探求のためのステップですので、また <%= ENV['DATABASE_PASSWORD'] %> にもどしていただきますが、 原因は 環境変数が渡っていない とわかりましたので、そちらで探求となります。 環境変数はどう設定していますか
mokosamejima

2021/10/15 01:13

承知いたしました! 環境変数については、以下のように設定しました。 $ sudo vim /etc/environment DATABASE_PASSWORD='データベースのrootユーザーのパスワード' SECRET_KEY_BASE='作成したsecret_key_base' AWS_ACCESS_KEY_ID='ここにCSVファイルのAccess key IDの値をコピー' AWS_SECRET_ACCESS_KEY='ここにCSVファイルのSecret access keyの値をコピー'
mokosamejima

2021/10/15 01:27

今確認したら、「'」の種類が間違ってたかも知れないです。 env | grep DATABASE_PASSWORD DATABASE_PASSWORD=00000’ ↓パスワードの横コンマを変えたら以下のような表記になりました。 env | grep DATABASE_PASSWORD DATABASE_PASSWORD=00000 この横のコンマが邪魔していたのでしょうか?
winterboum

2021/10/15 05:50

コンマ?? コーテーション の間違い? コーテーションには3つあります。 この内 逆コーテーション (shift + @) でなければ、左右一致していれば問題ないですが 空白なしなら、コーテーションつけなくても大丈夫かも、ですが
guest

0

こんにちは。

development: とtest:には socket:の記述がないので、Default:のものが
使用されていて、 /tmp/mysql.sockになっていると思われますが、production:
だけsocket: /var/lib/mysql/mysql.sockとなっています。

socketファイルはmysqlサーバとクライアントで同じ場所を見に行かないと
接続できませんので、この指定が邪魔しているのではないでしょうか?

(余談ですが自分で行ったこと③のMySQLを再起動はコマンドが間違っていてエラーに
なっていますので、実際には再起動できていないようですよ。)

--以下追記しました --
test: や delelopment:が/tmp/mysql.sock の指定でうまくいっているように見えたので
socket:指定は不要かと思いましたが追記していただいた内容からすると、socketは正しいようです。
socket: /var/lib/mysql/mysql.sockの記述は元に戻してください(ごめんなさい)

そうなると、winterboumさんのおっしゃるパスワードも気になるところですが、OSの実行ユーザーに
権限も気になります。

ご自身でされたことの中にmysql -u root -p ですんなり接続されているように見えるものが
あるので、環境がすこし違うのかもしれませんが、mysqlのroot@localhostをローカル接続で
使用する際にOSの実行ユーザーにroot権限が必要だったと思いますので、winterboumさんの
ご提示試してみてもダメなようでしたら、かつ可能でしたら、mysql上にrootでない
実行ユーザーを作成し、パスワードと権限を付けた上、そのユーザーを指定して実行したら
改善しないでしょうか?

投稿2021/10/14 11:36

編集2021/10/14 14:56
beadv

総合スコア144

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

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

mokosamejima

2021/10/14 11:45

ご連絡していただき、ありがとうございます! production:の socket: /var/lib/mysql/mysql.sockを /tmp/mysql.sockにした方がいいかも知れないということでしょうか?? 理解力がなくて申し訳ないですが、教えていただけると幸いです。
beadv

2021/10/14 11:49

evelopment: とtest:ではうまくいっていて、production:だとダメ、 ということであれば、mysqld(サーバ)は/tmp/mysql.sock にファイルをおいて 待機してるんじゃないかと思いますので、socket: の行を消してしまうか (消せばdefault:の定義が採用されるはず)指定するならおっしゃるように /tmp/mysql.sock に合わせてみてはどうでしょうか?
mokosamejima

2021/10/14 12:02

詳しく教えていただきありがとうございます! 消してみたのですが、違うエラーが出るようです… 質問の方に追記しましたので、ご確認をお願いします。
beadv

2021/10/14 12:17

development もしくはtestのどちらか(もしくは両方)ではうまくいったという前提で 見ていましたが、この前提は異なりますか? エラーの内容からするとソケットファイルは/var/lib/mysql/mysql.sockの方が ただしそうです。確認ですが、 /var/lib/mysql/ の下にmysql.sock というファイルは存在するでしょうか? また、ターミナルからmysql -u root -pでログイン後 select @@socket; というSQLを実行すると、サーバが認識している ソケットファイルの場所が表示されますが、その表示はどのようになりますか?
mokosamejima

2021/10/15 00:30

ローカル環境はうまく起動していました!本番環境のみ、起動しないといった感じでした… winterboumさんの通り、パスワード直書きでコマンドが正常に動きました。 select @@socket; といった確認方法もあるのですね…本当に勉強になります! 多分認識してくれていそうです! MariaDB [(none)]> select @@socket; +---------------------------+ | @@socket | +---------------------------+ | /var/lib/mysql/mysql.sock | +---------------------------+
beadv

2021/10/15 00:43

コメントありがとうございます。ローカル環境と本番環境はDB名だけでなくてそもそも 実行しているサーバが異なるのですね。納得しました。 パスワード直書きでうまく動いたということは、本番環境で環境変数 DATABASE_PASSWORD を設定する手順が不足しているようですね。 (.envファイルあたりでしょうか?)
mokosamejima

2021/10/15 01:15

やっぱり環境変数が怪しいですよね… winterboumさんのコメントに、環境変数を記載したのですがここの設定が影響してますよね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問