yosemite's blog

About technology, books, diary

MySQLが起動できなくてハマった

mysql
mysql

契機

今回、ローカルから root ユーザを使って MySQL に接続しようとした際に、接続できずにハマったので備忘録的に残そうと思いまとめました。
メモしていたパスワードが間違っている訳でもないので、理由がわからずググると同じような人が何人かいらっしゃったので参考にさせていただきました。

環境

接続しようとしたところ、以下のようなエラーが発生しました。

$ mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

問題解決にあたり行なったこと

原因調査

とりあえず原因を探る

まずは停止して、エラーに出ている /tmp/mysql.sock があるかどうか見てみます。

$ mysql.server stop
Shutting down MySQL
.. SUCCESS! 

$ ls /tmp | grep mysql.sock
$ 

…ない。
とりあえず作ろうか。(パーミッションとかも正しくして)もう一度起動してみる。

$ sudo touch /tmp/mysql.sock
$ sudo chown mysql:mysql /tmp
$ sudo chmod 777 /tmp/mysql.sock

起動

$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/<username>-no-MacBook-puro.local.pid).

今後は、PID ファイルがないって怒られる…。さて、どうしたものか。

こちらの記事を参考にさせていただきました。

[https://qiita.com/natsu_no_yuki/items/ae4c94187093e4ab3cdc:embed:cite]

PIDファイルを自分で作って、chmodやchownも試したが、実行結果は変わらず 所有権を変えたり、chmodで誰でも書き込めるようにしたり、sudoからmysqlを立ち上げたりとしたけど何をしても変わらず。

まじ?

MySQL 入れ直す

上記の記事にもあるように homebrew で再度インストールし直していきます。

/usr/local/var/mysql も削除
仕方ない、こちらも削除。DBの実体なんかも含まれているが、丸っと削除(データが無くなると困る場合は、DBと同名のファイルを退避させるなど)

ということなので、事前にこちらを削除しておきます。

$ rm -rf /usr/local/var/mysql

再 homebrew ...

$ brew uninstall mysql
$ brew install mysql

~ 省略 ~

We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Summary
🍺  /usr/local/Cellar/mysql/8.0.17: 284 files, 272.5MB

インストールが終わりました。
出力されている案内通りに進めていきます。

その前に

ちゃんとコマンドから接続できるか確認

$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.17 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

入れた👍
exit でコマンドに戻ってパスワードの設定を済ませておきます。

パスワード設定

$ mysql_secure_installation
Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

ここでは、セキュア設定、rootユーザのパスワードができます。
詳細は割愛します。

選択したパスワードポリシーに合わせてパスワードを設定していきます。
ご自分の好きなパスワードが無事設定できたら接続してみましょう。

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.17 Homebrew

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

はい。
無事に接続することができました。

参考にした記事

同じような現象について言及されているを参考にしました。
大変参考になりました。ありがとうございました🙏