LoginSignup
7
6

More than 5 years have passed since last update.

EC2でMYSQLに問題があるようでサーバーが起動しない

Last updated at Posted at 2017-02-15

unicornでサーバー起動しても立ち上がらない

以下のコマンドでサーバー起動を試みる。

unicorn_rails -c config/unicorn.rb -E production

config/unicorn.rbではunicornについての設定ファイルを指定、-E productionで環境を指定している。

サーバーが起動せずプロセスも即終了してしまう。なぜだ。

エラーログを確認してみる

less log/unicorn.stderr.logでエラーを確認する。

I, [2017-02-15T16:36:15.916766 #18260]  INFO -- : Refreshing Gem list
I, [2017-02-15T16:36:17.465988 #18260]  INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2017-02-15T16:36:17.467622 #18260] ERROR -- : Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)

ふむふむ。なにやらrootユーザーでアクセスを試みて失敗している模様。
using password: NOという部分が気になる。環境変数で設定したパスワードが読み込まれていない?

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

適当なパスワードでmysqlにログイン

試しに適当なパスワードでログインを試みると、間違ったパスワードなので弾かれるが、using password: YESの記述が。

unicornでサーバーを起動する際はNOだったので、やはりこれは「パスワードが存在しない」とされているようだ。

[ec2-user@ip-xxx-xx-xx-xx pairs-like]$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[ec2-user@ip-xxx-xx-xx-xx pairs-like]$

環境変数を変えて再度試みる

envで環境変数を表示しようとしてもDATABASEの環境変数とパスが表示されない。試しにsudo envを打つと表示される。env | grep DATABASE_hogehogeだと表示される。謎い。

という事でTEST_DATABASEにしてみたらenvでもちゃんと表示された。railsのdatabase.ymlで読み込む変数もこれに変更して再度サーバーを起動してみる。

念のためmysqlサーバーを再起動

[ec2-user@ip-xxx-xx-xx-xx pairs-like]$ sudo service mysqld start
Starting mysqld:                                           [  OK  ]

しかし結果は変わらず...。

I, [2017-02-15T16:52:01.405933 #18452]  INFO -- : Refreshing Gem list
I, [2017-02-15T16:52:04.180356 #18452]  INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2017-02-15T16:52:04.183666 #18452] ERROR -- : Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)

環境変数が使えてないのではないか....

mysqlのpasswordを変えてみろとか書いている記事がいくつかあったのですが、それは面倒だしmysql -u root -pでログインは出来るので、そこじゃない。

そもそもdatabase.yml内で環境変数が読み込めていないのではないか(記述がまちがっているとかで)。

ちなみに現在は <%= ENV['hogehoge'] %>のように読み込んでいる。これを一時的にパスワードをベタで書いてみるとどうか。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: hogehoge
  socket: /var/lib/mysql/mysql.sock

動いた...!

環境変数が正しく展開できていなかったのでは?

[rails]production環境のdatabase.ymlでハマったこと(環境変数設定)

こんな記事が書かれていまして、ジェネレーターで生成したパスワードに$が含まれるなどして環境変数が正しく展開されない時があるとのこと。

確認してみたが、そう言った事は特にない模様。

結局、再度環境変数をdatabase.ymlに設定したら動いた

なんとも虚しい結果ですが、再度環境変数を設定してdatabase.ymlの記述を変更したら動きました。
意味不明です。envをしても表示されるようになりました。

世の中には不思議な事が沢山ありますね。

7
6
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
7
6