0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mysql2::Error::ConnectionError への対処方法

Last updated at Posted at 2023-09-01

Mysql2::Error::ConnectionErrorへの対処方法

RailsプロジェクトをRails_newで作成した後、開発環境にデータベースを生成しようと試みた際のエラーいついて、原因と対処法を、こちらに備忘録としてまとめておきます。

エラー内容1

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Couldn't create '*****_*****_development' database. Please check your configuration.
rails aborted!
日本語翻訳
ソケット「/tmp/mysql.sock」経由でローカルMySQLサーバーに接続できません (2)。
「*****_*****_development」データベースを作成できませんでした。設定を確認してください。
Railsが中止されました!

エラー内容2

Caused by:
Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
日本語翻訳
Mysql2::Error::ConnectionError:のせいで: 
ソケット '/tmp/mysql.sock' を介して、
ローカルMySQLサーバーに接続できません (2)

エラー発生までの経緯

  • Ruby on Railsでアプリケーションを作成中
  • Ruby、Railsをインストール
  • Rails newコマンドを実行後、
  • $ bundle exec rails db:createを実行したタイミングでエラーが発生した。

対処をしていく流れを記録

  • /tmp/mysql.sockというファイルがあるか確認->なかった
  • このファイルが存在しないことが原因かな?

/tmp/mysql.sockって何? ChatGPTの回答

  • /tmp/mysql.sockは、MySQLがローカル接続用に使用するUNIXソケットファイルのデフォルトのパス。
  • UNIXソケットは、同じマシン上のプロセス間でデータをやり取りするための通信手段だ。この場合、RubyのプログラムがMySQLのデータベースと通信するために使用する。
  • ただし、これはあくまでファイルパスであって、コードの一部ではない
  • このパスが指定されている場所や、それがどのように使われているかによって、その扱い方や意味が変わる可能性がある。

/tmp/mysql.sockが存在するかを確認する。

$ mysql_config --socket  # MySQLで設定されているSocketのパスを確認するコマンド
# #/tmp/mysql.sock ->これは良さそう。

$ ls -la /tmp/mysql.sock  # /tmp/mysql.sockが対象のディレクトリ配下に存在するか確認するコマンド
# # ls: /tmp/mysql.sock: No such file or directory

/tmp/mysql.sockをとりあえず作成する。

$ cd ~/対象のディレクトリパス #対象のアプリディレクトリに移動してから、、、
$ touch /tmp/mysql.sock # /tmp/mysql.sockを作成する。
$ ls -la /tmp/mysql.sock # ->一応できたっぽい?
## -rw-r--r--  1 ****** wheel  0  9  1 09:49 /tmp/mysql.sock
  • -rw-r--r--は、所有者のパーミッション、グループのパーミッション、他人のパーミッションといったものを示している。
  • rは読み出しwは書き込みを示している。

もう一度$ bundle exec rails db:createを実行してみる。

$ bundle exec rails db:create

またエラーになってしまうが、エラー内容は少し変わった。

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
Couldn't create '****_****_development' database. Please check your configuration.

エラーが(2)から38)に変わっただけだが、これはなんなのだろう?

config/database.yml内で socketの指定先が違っている可能性

とりあえず、database.ymlの中身を確認してみる。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  host: localhost
  socket: /tmp/mysql.sock # ここがなかったので追記してみた。

もう一度bundle exec rails db:createを実行してみる。

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
Couldn't create '****_****_development' database. Please check your configuration.

エラーは変わらず、、、、

可能性:MySQLサーバーを起動しないと、接続ができないということかもしれない。

  • どうやら、自身で、以前にも同じような内容でハマっていたことがあったようだ。
  • mysqlサーバーを起動すれば、 /tmp/mysql.sock が自動で生成されるらしい。
  • 以下コマンドを試してみる。
$ mysql.server start

-> Starting MySQL
   SUCCESS! 
  • 一旦、先ほど、指定したdatabase.ymlsocket: /tmp/mysql.sockという追記した部分は削除して、元に戻した。
  • その上で、再度$ bundle exec rails db:createを実行してみる。
Created database 'app_name_development'
Created database 'app_name_test'
  • データベース作成できました!
  • Railsサーバーも立ち上がりました!

まとめ

  • MySQLでデータベースを作成する場合は、MySQLサーバーを起動していないとできない。
  • $ mysql.server startでMySQLサーバーを起動してから、$ bundle exec rails db:createを実行する。

参考サイト

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?