#MySQLエラー発生
PCを再起動した後rails s
でアプリケーションサーバを起動ようとしたところMySQLエラーが発生しました。
Mysql2::Error::ConnectionError
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
エラーを見ると「/tmp/mysql.sockを通じてローカルのMySQLサーバーに接続できませんでした。」と書いてあります。
mysql.sockが無い!?
sockというのは、ファイルシステムソケットのことで、ローカルシステム内で通信を行う際に、このsockファイルを仲介役にしてMySQLとRuby/Rails間での通信を行っています。
このsockファイルはMySQLが起動した時に生成され、MySQLが停止すると削除されるファイルです。
#MySQLエラー解決に必要なこと
MySQLエラーには色々な原因があるので、今起きている問題は何なのか要素を切り分けて考えることが必要です。
1.MySQLサーバーが起動しているか
2.起動に必要な権限があるか
3.ソケットのパスが正しく通っているか
4.ソケットの生成場所が正しく設定されているか
5.MySQLサーバーが複数起動していないか
この記事では1と2の解決方法について解説します。
1.MySQLサーバーを起動させる
PCを再起動したときにMySQLが停止してmysql.sockが削除されてしまっています。
なのでMySQLを起動させてsockファイルを生成しましょう。
# MySQLを起動
$ mysql.server start
###mysql.server start
でダメなら
原因不明ですがMySQLを起動する権限が現在のユーザーでなくなっていることがあるようです。
この場合でもsudoコマンドを使ってroot権限でMySQLを起動させることができます。
$ sudo mysql.server start
Starting MySQL
.. SUCCESS!
と表示されればOKです。
2.必要な権限を与える
###権限の確認
1.MySQLのあるディレクトリまで、cdコマンドで移動します。
$ cd /usr/local/var
2.pwdコマンドで今居るディレクトリを表示して正しく移動できたか確認します。
$ pwd
# /usr/local/varと表示されればOKです。
3.ディレクトリの状態を確認します。
$ ls -l
usr/local/varの配下で起動中のプロセスが表示されます。
total 0
drwxrwxr-x 4 yamazaki admin 128 8 7 2019 homebrew
drwxr-xr-x 3 yamazaki admin 96 11 8 23:22 log
drwxr-xr-x 13 _mysql _mysql 416 3 19 06:40 mysql
drwx------ 25 yamazaki admin 800 3 5 01:02 postgres
drwx------ 24 yamazaki admin 768 10 30 00:34 postgresql@10
mysqlの所だけユーザー名ではなく_mysqlとなっています。
4.chownコマンドでディレクトリの権限を変更させます。
$ sudo chown -R [ユーザー名] mysql
5.[ユーザー名]の部分に任意のユーザー名を入れます。
$ sudo chown -R yamazaki mysql
6.変更を確認します。
$ ls -l
total 0
drwxrwxr-x 4 yamazaki admin 128 8 7 2019 homebrew
drwxr-xr-x 3 yamazaki admin 96 11 8 23:22 log
drwxr-xr-x 12 yamazaki _mysql 384 3 21 17:45 mysql
drwx------ 25 yamazaki admin 800 3 5 01:02 postgres
drwx------ 24 yamazaki admin 768 10 30 00:34 postgresql@10
権限がユーザーに変更されました。
この状態でMySQLを起動してみましょう。
$ mysql.server start
無事起動できればOKです。