ことの発端
脱初心者しよう。スキルアップするには自分でサービスを立ち上げてみることが一番だろう。
そう思いRailsアプリを作ろうとMysqlをmacで動かそうとしたら見事にハマったのでメモ。
なおこの記事は回り道が多く有益ではないので「こんな風に対応したのか」だけ見て頂ければ。
環境
MacOS Catalina 10.15.7
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.7
BuildVersion: 19H114
この記事で出てくるエラーのまとめ
あくまで自分の環境の場合です。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- mysqlが起動してなかった
. ERROR! The server quit without updating PID file
- PIDファイルが無かった
- PIDファイルの権限が違った
- ホスト名が明示的に設定されてなかった
mysqld_safe A mysqld process already exists
- Homebrewでmysql入れ直した際に作られたmysqlのplistの設定で止まらないようになってた
作業の経緯
mysqlの動作確認をしようとするとエラー。
$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
psの結果を見てもプロセスは立ち上がっていない。
$ ps -ef | grep mysql
501 70946 3833 0 8:39PM ttys000 0:00.00 grep mysql
sudo mysql.server start で起動させようとするとまた違うエラー。
$ sudo mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/sugeta10.fletsphone.pid).
そもそもpidファイルが存在していない?
・・・というか、コンピュータ名の次にあるホスト名みたいなの、なに・・・?
調べてみたところ以下の記事を発見。
MacでPIDファイルによるエラーでmysqlを起動できない時の対処法 (ERROR! MySQL server PID file could not be found!)
「Macの場合ですが、ホスト名が明示的に設定されていない場合、ネットワークが変わるとホスト名も変わってしまう」
ということなので設定を確認。
$ sudo scutil --get ComputerName
sugeta10
$ sudo scutil --get LocalHostName
sugeta10
$ sudo scutil --get HostName
HostName: not set
設定できるようなので試してみます。
$ sudo scutil --set HostName sugeta10
$ sudo scutil --get HostName
sugeta10
そもそもこれらの設定はなんなのだろうと調べてみたところ、以下の記事を発見
参照:MacOS の ComputerName/LocalHostName/HostName 備忘録
ざっくりまとめるとこのような感じのようです。
- ComputerName:システム環境設定 → 共有 → コンピュータ名から参照できる名前
- LocalHostName:MacのBonjourで使用する名前 (ComputerNameと実質同じ)
- HostName:ターミナルから問い合わせた場合の名前
さて、これで起動するかと思いきや叶わず。ファイルがないよと。
$ sudo mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/sugeta10.pid).
$ ls /usr/local/var/mysql/sugeta10.pid
ls: /usr/local/var/mysql/sugeta10.pid: No such file or directory
ファイルを作ろうとしてパーミッションエラーになったので、sudo付けて再実行。権限も修正。
$ touch /usr/local/var/mysql/sugeta10.pid
touch: /usr/local/var/mysql/sugeta10.pid: Permission denied
$ sudo touch /usr/local/var/mysql/sugeta10.pid
$ sudo chown _mysql:_mysql /usr/local/var/mysql/sugeta10.pid
でもダメ・・・!
$ sudo mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/sugeta10.pid).
各所見て回って「mysql入れ直すしかねぇ」という話が多かったので以下を参考に。
[The server quit without updating PID file mysqlエラー解決方法]
(https://qiita.com/kazu_wsx/items/bb787e9e4e919da03705)
$ rm -rf /usr/local/mysql
$ rm -rf /Library/StartupItems/MYSQL
$ rm -rf /Library/PreferencePanes/MySQL.prefPane
$ rm -rf /Library/Receipts/mysql-.pkg
$ rm -rf /usr/local/Cellar/mysql*
$ rm -rf /usr/local/bin/mysql*
$ rm -rf /usr/local/var/mysql*
$ rm -rf /usr/local/etc/my.cnf
$ rm -rf /usr/local/share/mysql*
$ rm -rf /usr/local/opt/mysql
$ brew install mysql@5.6
$ echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ mysql.server start
いけたか?
起動してみたら、「SUCCESS!」と言いつつ変なメッセージが渡されている。。。
$ mysql.server start
Starting MySQL
SUCCESS!
$ 210214 11:26:15 mysqld_safe A mysqld process already exists
何度停止しても停止できない・・・
$ mysql.server stop
Shutting down MySQL
.. SUCCESS!
$ mysql.server stop
Shutting down MySQL
.. SUCCESS!
startしたときに何故か渡されている文字で調べてみると以下記事を発見。
藁にもすがる思いで上記参考に以下を実施。
$ vi ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
変更前
<dict>
<key>KeepAlive</key>
<true/>
変更後
<dict>
<key>KeepAlive</key>
<false/>
設定変更を反映
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
起動できた・・・!😂
$ mysql -u root