🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Ruby on Rails

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

Amazon EC2

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

AWS(Amazon Web Services)

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

Q&A

解決済

2回答

1460閲覧

rails db:createでデータベースが作れない

CipherB

総合スコア5

MySQL

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Ruby on Rails

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

Amazon EC2

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

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿2019/11/06 08:20

AWSを使っていつも通りwebページを作っていたら突然エラーが出て進まなくなってしまったのでお力を貸していただけたらと思います。

https://qiita.com/kftokyo/items/c2dbac6e7de4c45d3f8e

事の端末は上記にまとめたのですが、簡単にいうと
rails db:create
をすると
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
と出てしまいます。

エラー文をもとに検索し、書かれている対処法を試しても
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13)
になり、その対策法を試しても
Access denied for user 'root'@'localhost' (using password: NO)
になってしまい、結局その後はどの対処法を試しても全く改善されなくなってしまいます。

当方かなりの初心者なので質問内容や質問の仕方が稚拙かとは存じますが、何卒お力添え頂けたら幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

3ステップあるかと思います。今は1で止まっているように見えます
1)ソケットfileはあるか、それは正しいソケットファイルか
2)ユーザは登録されているか、パスワードの設定はなされているか
3)ユーザに必要な権限があるか

1)のチェックですが
1-1)ls -l /tmp/mysql.sock した時に
srwxrwxrwx 1 mysql mysql 0 11月 7 04:51 mysqld.sock
と出ますか? 一番左の権限のところも注目
1−2)mysqlを停止し、そのfileを削除し、mysqlを再起動すると再びできますか?

######追記
2)のステップの準備です。ユーザの確認の前にこれで行けたらそのままでよいので
config/database.yml にsocket: /tmp/mysql.sock というのがあるかと。
それを socket: /var/lib/mysql/mysql.sock にしてdb:create を試して下さい

投稿2019/11/06 20:29

編集2019/11/07 21:38
winterboum

総合スコア23567

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

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

CipherB

2019/11/07 13:40

ありがとうございます! 早速STEP1のチェックをしてみました。 -rw-r--r-- 1 777 root 0 Nov 6 06:52 /tmp/mysql.sock このような結果になりました。 rm /tmp/mysql.sock で削除したのち再起動しましたが、 ls -l /tmp/mysql.sock をしてもNo such file or directoryになってしまいます。
winterboum

2019/11/07 14:09

mysqld が動いているのは確かめましたか?  もし動いていたなら socket fileが他にあるのかも。 今までの経験では  "/tmp/mysqld.sock",   "/tmp/mysql.sock",  "/var/run/mysqld/mysqld.sock", "/var/lib/mysql/mysql.sock" などがありました。
CipherB

2019/11/07 14:36

sudo service mysqld statusでrunningになっているのを確認しました。 確認したところ/var/lib/mysql/mysql.sockにあるようです。
CipherB

2019/11/08 08:21 編集

STEP2の準備を試しました。 そしてdb:createしたところ以下のように、 Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development': CREATE DATABASE `nextstage_development` DEFAULT CHARACTER SET `utf8` Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development': CREATE DATABASE `nextstage_development` DEFAULT CHARACTER SET `utf8` /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development' /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) database.ymlを質問初期の頃から変更していたので、変更していた箇所を一旦戻してdb:createをしたところ Access denied for user 'root'@'localhost' (using password: NO) Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: NO) /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) 初期状態のusername: rootからusername: ec2-userに変更した結果 Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development': CREATE DATABASE `nextstage_development` DEFAULT CHARACTER SET `utf8` Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development': CREATE DATABASE `nextstage_development` DEFAULT CHARACTER SET `utf8` /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development' /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) といった実行結果になりました。 database.ymlはQiitaの記事にあるような初期状態のままの方がよろしかったでしょうか?
winterboum

2019/11/08 08:24

Mysqlにどういうユーザを登録しましたか?
CipherB

2019/11/08 10:49

ユーザーはec2-userになっています。
winterboum

2019/11/08 12:06

msdn -u ec2-user でloginできますか? msdn -u ec2-user -p ではどうですか?
CipherB

2019/11/09 04:45

どちらも -bash: msdn: command not found というメッセージが出ます。
winterboum

2019/11/09 04:51

ごめん、間違えた mysql -u ec2-user です
CipherB

2019/11/09 04:59

どちらでもloginできました!
winterboum

2019/11/09 05:03

すると ec2-userはパスワード無しでmysqlにloginできるわけですね。 その設定が database.ymlで許されるかどうか判らんのですが、 development: のところを username: ec2-user, password を削除してやってみて下さい。 それでだめでしたら、mysql のec2-userにパスワードを設定してみて下さい
CipherB

2019/11/09 07:29

database.ymlをパスワードなしで編集して実行してみたところ同じエラー画面が出ました。 その後パスワードを設定し、development:のところにはusername等がなかったのでそれも追加して以下のような状態にして実行したところ default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: ec2-user password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock development: <<: *default database: nextstage_development username: ec2-user password: <%= ENV['DATABASE_PASSWORD'] %> test: <<: *default database: nextstage_test production: <<: *default database: nextstage_production username: ec2-user password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock 結果 Access denied for user 'ec2-user'@'localhost' (using password: YES) Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Access denied for user 'ec2-user'@'localhost' (using password: YES) /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) となりました。
winterboum

2019/11/09 07:58

password: <%= ENV['DATABASE_PASSWORD'] %> でなく、実際のパスワードをいれて試して下さい。 そのパスワードをここに出す必要はありませんが
CipherB

2019/11/09 14:39

passwordを password: XXXXXX のような形で試してみましたが、 Access denied for user 'ec2-user'@'localhost' (using password: YES) Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Access denied for user 'ec2-user'@'localhost' (using password: YES) /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) といった結果になりました
winterboum

2019/11/09 21:33

さて、、 Mysqlにloginできていないのか、DB作成権がないのかどっちだろう。 どういう権限を与えていますか?
CipherB

2019/11/10 02:29

Qiitaを見返した限りだとmysql関係で行った作業はこれくらいで、権限をどうしたかというのはちょっと解りません。 $sudo yum install mysql56-server mysql56-devel mysql56 $ sudo service mysqld start $ sudo service mysqld status $ sudo /usr/libexec/mysql56/mysqladmin -u root password 'XXXpasswordxxx' $ mysql -u root -p $ rake secret $ sudo vim /etc/environment DATABASE_PASSWORD='MySQLのパスワード' SECRET_KEY_BASE='さっきの文字列'
winterboum

2019/11/10 03:31

ec2-user は作っていないのですね? root(OSの、ではなくmysqlの)にはパスワードをつけたのでしょうか。 'XXXpasswordxxx' がそう?でしたら username: root password: XXXpasswordxxx で試して下さい
CipherB

2019/11/10 05:12

おお! できました! ありがとうございます!!! ということは<%= ENV['DATABASE_PASSWORD'] %>がうまく機能していなかったということなんでしょうか。 しかし他のプロジェクトでは動くので原因がいまいち思いつきません。 database.ymlに直接passwordを入れてしまうのはセキュリティ上問題がある気がするのですが何かいい対処法はありますでしょうか?
winterboum

2019/11/10 05:53

他のプロジェクトはどなたがセットアップしましたか? 環境変数 DATABASE_PASSWORD の設定がうまく行っていないのだと思います。 その可能性が高かったので、直書きで試してもらった次第
CipherB

2019/11/10 09:18

他のプロジェクトも全部自分でセットアップしました。 やり方も全く同じ手順で行ったはずなのですが……
CipherB

2019/11/10 09:31

database.ymlは最終的にこのようにすれば正しく動くようでした。 default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: XXXpasswordXXX socket: /var/lib/mysql/mysql.sock development: <<: *default database: nextstage_development test: <<: *default database: nextstage_test production: <<: *default database: nextstage_production username: root password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock
guest

0

Access denied for user 'root'@'localhost' (using password: NO)

とありますので、MySQLにログインできていません。ユーザが作られているか、権限が与えられているか、ユーザ名とパスワードが設定ファイルに書かれているか、などをチェックするといいと思います。

投稿2019/11/06 08:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

CipherB

2019/11/06 09:13

ありがとうございます! 今試してみたのですが、 まずmysqlと入力してクエリで SELECT user, host FROM mysql.user; と入力してみたのですが ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user' と出てしまいユーザー確認ができませんでした。
退会済みユーザー

退会済みユーザー

2019/11/06 09:14

> mysqlと入力してクエリで ということはログインできているのではないでしょうか。
CipherB

2019/11/06 09:31

あ、そうですね この状態でもやはりrails db:createすると Access denied for user 'root'@'localhost' (using password: NO) Couldn't create 'XXXXXX_development' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Access denied for user 'root'@'localhost' (using password: NO) /var/www/XXXXXX/bin/rails:9:in `<top (required)>' /var/www/XXXXXX/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) と出てしまいます……
退会済みユーザー

退会済みユーザー

2019/11/06 09:33

- 具体的にどのようなコマンドを入力してmysqlにログインしましたか? - そのときにコマンドを入力したユーザは誰ですか?
退会済みユーザー

退会済みユーザー

2019/11/06 09:35

あと、MySQLはどこにどのように設置してあるものですか? EC2?RDS? EC2ならばRailsとは別のサーバですか?
CipherB

2019/11/06 09:35

[ec2-user@ip-172-31-32-133 XXXXXX]$ mysql です。 コマンドを入力したユーザーの確認方法はどのようにしたらよろしいでしょうか?
CipherB

2019/11/06 09:37

MySQLはEC2にインストールしました。 同じサーバーにrailsもインストールしました。
退会済みユーザー

退会済みユーザー

2019/11/06 09:40

whoami でユーザを確認できます。ubuntuとかcentosとかかと思います(違うかもしれません)。
CipherB

2019/11/06 09:41

ec2-userという風に出ています。
退会済みユーザー

退会済みユーザー

2019/11/06 09:53

なるほど。MySQLにログインしているユーザは、 mysql> SELECT USER( ); で確認できます。
CipherB

2019/11/06 09:57

ありがとうございます! +--------------------+ | USER() | +--------------------+ | ec2-user@localhost | +--------------------+ 1 row in set (0.00 sec) という風に出ました。
退会済みユーザー

退会済みユーザー

2019/11/06 10:20

少々問題はありますが、database.yml のユーザー名をec2-userにすれば大丈夫だと思います。 デプロイの方法によっては、この限りではないです。
CipherB

2019/11/06 11:55

Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'XXXXXX_development': CREATE DATABASE `XXXXXX_development` DEFAULT CHARACTER SET `utf8` Couldn't create 'XXXXXX_development' database. Please check your configuration. rails aborted! ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'XXXXXX_development': CREATE DATABASE `XXXXXX_development` DEFAULT CHARACTER SET `utf8` /var/www/XXXXXX/bin/rails:9:in `<top (required)>' /var/www/XXXXXX/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'XXXXXX_development' /var/www/XXXXXX/bin/rails:9:in `<top (required)>' /var/www/XXXXXX/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)
CipherB

2019/11/06 11:57

database.ymlのdefaultとproductionのusernameをec2-userに変えてみたのですがrails db:createしたらこのようになりました。
退会済みユーザー

退会済みユーザー

2019/11/06 11:59

- database.yml を追記してください - 質問文には Access denied for user 'root'@'localhost' (using password: NO) と書かれていますが、やりとりの途中から Access denied for user ''@'localhost' to database に変わっているのですが変更を加えたのですか?
CipherB

2019/11/06 12:22 編集

database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: ec2-user password: socket: development: <<: *default database: XXXXXX_development test: <<: *default database: XXXXXX_test production: <<: *default database: XXXXXX_production username: ec2-user password: <%= ENV['DATABASE_PASSWORD'] %> socket:
CipherB

2019/11/06 12:23

変更はdatabase.ymlのusernameをec2-userに変更したことのみです。
退会済みユーザー

退会済みユーザー

2019/11/06 12:32

ec2-user に変更する前から、 ``` 今試してみたのですが、 まずmysqlと入力してクエリで SELECT user, host FROM mysql.user; と入力してみたのですが ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user' と出てしまいユーザー確認ができませんでした。 ``` となっているように読めます。 ec2-userに変更する前から、Access denied for user 'root'@'localhost' (using password: NO) と書かれていますが、やりとりの途中から Access denied for user ''@'localhost' to database に変わっていると読めます。 本題の解決方法は、username の値がクォートされていないからです。 'ec2-user' とします。
CipherB

2019/11/06 12:49

確かにMySQLで ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'user' が出た後にrails db:createしたあとのエラーでは Access denied for user 'root'@'localhost' (using password: NO) になっています。 しかしその後ターミナルにもGitHub DesktopのHistoryにもdatabase.yml以外の変更等はない状態でrails db:createした際のエラー文は Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'XXXXXX_development': CREATE DATABASE `XXXXXX_development` DEFAULT CHARACTER SET `utf8` のように表示されています。 どうしてかは申し訳ありませんがちょっと解りません。
CipherB

2019/11/06 12:53

username: 'ec2-user' 上記のような形でよろしかったでしょうか? 二つのusernameをクォートしてみたのですが、同じエラーが出てしまいました。 Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development': CREATE DATABASE `nextstage_development` DEFAULT CHARACTER SET `utf8` Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! ActiveRecord::StatementInvalid: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development': CREATE DATABASE `nextstage_development` DEFAULT CHARACTER SET `utf8` /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Caused by: Mysql2::Error::ConnectionError: Access denied for user ''@'localhost' to database 'nextstage_development' /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace)
CipherB

2019/11/06 12:58

socketの後に何も書かなくていいという記事があったのでコメントアウトしていたディレクションを default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: 'ec2-user' password: socket: /tmp/mysql.sock production: <<: *default database: nextstage_production username: 'ec2-user' password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock というように変更してみてrails sb:createをしたところ Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) Couldn't create 'nextstage_development' database. Please check your configuration. rails aborted! Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) /var/www/nextstage/bin/rails:9:in `<top (required)>' /var/www/nextstage/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) というエラーに戻ってきました。
退会済みユーザー

退会済みユーザー

2019/11/06 13:03

database名がクォートされていません。エラーメッセージを読みましょう。
CipherB

2019/11/06 14:31

default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: 'ec2-user' password: socket: /tmp/mysql.sock development: <<: *default database: 'nextstage_development' test: <<: *default database: 'nextstage_test' production: <<: *default database: 'nextstage_production' username: 'ec2-user' password: <%= ENV['DATABASE_PASSWORD'] %> socket: /var/lib/mysql/mysql.sock このような形でdatabase名をクォートしてみましたが上と同じエラーがいまだに出てしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問