ayaka-k
@ayaka-k (あやか)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")

docker-compose exec web rails db:createでエラーにはまる

調べてみましたが、なかなか抜け出せなく困っています。

docker-compose upをしたときに、
おなじみの「Yay! You’re on Rails!」が
表示されるようにするにはどうしたらいいでしょうか?

「rails s」をすると、「Yay! You’re on Rails!」が表示できます。

「docker-compose up」をすると、
こちらのエラーページになってしまいます。

スクリーンショット 2021-03-10 1.10.56.png

こちら https://teratail.com/questions/283808
を参考にdatabase.ymlで
host:localhost → host:db にすると、
以下のエラーになります。

Mysql2::Error::ConnectionError: Access denied for user 'root'@'192.168.0.3' (using password: NO)

尚、下記記事を参考に環境構築を行っています。

エラー抜粋

ターミナル
ーーーーーーーーーーーーー
$ docker-compose exec web rails db:create
ーーーーーーーーーーーーー

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")

発生している問題・エラー全文

ターミナル
ーーーーーーーーーーーーー
$ docker-compose exec web rails db:create
ーーーーーーーーーーーーー

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
Couldn't create 'mysql2' database. Please check your configuration.
rails aborted!
ActiveRecord::ConnectionNotEstablished: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
/app_name/bin/rails:5:in `<top (required)>'
/app_name/bin/spring:10:in `block in <top (required)>'
/app_name/bin/spring:7:in `tap'
/app_name/bin/spring:7:in `<top (required)>'

Caused by:
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
/app_name/bin/rails:5:in `<top (required)>'
/app_name/bin/spring:10:in `block in <top (required)>'
/app_name/bin/spring:7:in `tap'
/app_name/bin/spring:7:in `<top (required)>'
Tasks: TOP => db:create
(See full trace by running task with --trace)
ERROR: 1

database.yml
# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: 5
  username: root
  password: 
  host: localhost


development:
  <<: *default
  database: test_app_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: test_app_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 or a full connection URL as an environment
# variable when you boot the app. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
#   production:
#     url: <%= ENV['MY_APP_DATABASE_URL'] %>
#
# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full overview on how database connection configuration can be specified.
#
production:
  <<: *default
  database: test_app_production
  username: test_app
  password: <%= ENV['TEST_APP_DATABASE_PASSWORD'] %>
0

3Answer

どうしても解決できない場合はmysqlをアンインストールして、再度インストールするのがいいかもしれません。(時々あるようです)

1Like

Comments

  1. @ayaka-k

    Questioner

    再起動、アンインストール、インストール、いろいろでなんとか解決することができました!
    アドバイスありがとうございます!
database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: 5
  username: root
  password: 
  host: localhost

になっているので,localhost に接続しようとしていると考えています.

こちらの記事ですと,

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: <%= ENV['DB_HOST'] %>
docker-compose.yml
services:
  web:
    environment:
      DB_HOST: db

の設定をするように読めます.

host:localhost → host:db にすると、

Mysql2::Error::ConnectionError: Access denied for user 'root'@'192.168.0.3' (using password: NO)

こちらのエラーはパスワード無しで接続できないということなので,パスワードを設定してあるか確認すると良いように見えます.

元記事だと

docker-compose.yml
services:
  db:
    environment:
      - MYSQL_ROOT_PASSWORD=password
database.yml
default: &default
  password: password

の辺りで設定してありそうです.

1Like

Comments

  1. @ayaka-k

    Questioner

    アドバイスありがとうございます!
    添付いただいた記事、非常に参考になりました。
    あれから再起動、アンインストール、インストール、mysqlが起動できず右往左往して、mysql起動確認、データベースがないよと怒られて、と手順を踏んでいったところ、無事にdocker-compose upで正常にページを表示することができました!
    mysqlへの理解が乏しくかなりの時間を費やしてしまったため、ひとつひとつ理解していくようにしたいと思います。
  2. 解決したなら良かったです

ご丁寧な説明、ありがとうございます。解決できました!
私の場合、こちらがポイントでした:

host: <%= ENV['DB_HOST'] %>

0Like

Your answer might help someone💌