タイトル通りターミナルからMySQLにログインしようとしたけど何をどう頑張ってもエラーが返ってきて何日も途方に暮れていましたが、再インストールしたら引くほどあっけなく起動した話です。
僕はまだこの辺りは初心者ということもあり、知識もないのでどうすればいいのか全くわからない状態。
とにかくネットに出回っている記事を読み漁り、ほぼ全部試したんじゃないかってくらい色々やりました。チカレタ。
この記事では僕が遭遇してきたエラーとネットで見かけた解決策(結局治りませんでしたが)、またその結果を書いていきます。
結局再インストールしたら治ったのでそのやり方も書きます。自分と同じくらいのレベル感の人に読んでもらえたら少しは参考になるかも。
環境:Mac
MySQLはhomebrew経由でインストール
MySQLとMAMP環境内のMySQLは全く別物
僕はこの辺に関する知識が全然ない初心者なので全く知りませんでしたが、MAMP環境で使えるMySQLとターミナルからログインして使うMySQLは全く別のソフトです。
MAMPはPHPやMySQLを使えるようにするソフトなので、MAMP環境で動くMySQLはあくまでMAMPというソフト内のもの。MySQLというターミナルからログインして使う独立したソフトとは全く別物です。
それに気付かず「MySQLアンインストールしたら今までWordPress案件とかで作ったデータベース全部消えちゃうじゃん…」なんて考えてましたが、全く的外れだったみたいです。
MySQLをアンインストールしてもMAMP環境内のMySQLのデータベースが消えたりすることは一切ないので安心してください。
こんな感じでそもそもデータベースを保管している場所が全く違うので、MySQLを一度アンインストールしてもMAMP環境のMySQLのデータベースが消えることはないです。
ターミナルからログインできるMySQLのデータベースは消えちゃいますが、以前データベースを使ったアプリを作ったことがないならどうせ何も入ってないのでバッサリとアンインストールしちゃって大丈夫です。独習phpでちょろっと触ったくらいなら大丈夫。
MySQLをアンインストールする
というわけで、先に「MySQLをアンインストールする」方法を紹介します。
MySQL自体をアンインストールするだけでなく、関連するファイルも綺麗さっぱり削除しちゃいます。もちろんデータベースも消えますが、以前データベースを使ってアプリを作ったことがないなら全然問題なしです。
1.MySQLが入っているか確認
$ mysql --version
mysql Ver 8.0.22 for osx10.14 on x86_64 (Homebrew)
まずはMySQLがインストールされているか確認してみます。
僕はhomebrewで入れたのでhomebrewって出てますね。
何はともあれMySQL自体はインストールされているみたいです。
2.MySQLをアンインストール
$ brew uninstall mysql
Uninstalling /usr/local/Cellar/mysql/8.0.22... (294 files, 292MB)
これでMySQL本体のアンインストールが完了です。
本当にできているか確認してみます。
$ brew services list
Name Status User Plist
mariadb stopped
php stopped
mariadbが入っていますが、これはMySQLではないですね。
とりあえずMySQLは削除できたみたい。
3.関連するファイルを全部削除
$ sudo rm -rf /usr/local/var/mysql
$ sudo rm -rf /usr/local/Cellar/mysql*
$ sudo rm -rf /usr/local/bin/mysql*
$ sudo rm -rf /usr/local/var/mysql*
$ sudo rm -rf /usr/local/etc/my.cnf
$ sudo rm -rf /usr/local/share/mysql*
$ sudo rm -rf /usr/local/opt/mysql*
$ sudo rm -rf /etc/my.cnf
MySQL関連のファイルを全部削除しちゃいます。
これをやらないと再インストールしても古い設定ファイルなどが引き継がれてエラーが治らなかったりするので全部削除しちゃってください。
4.mysql.sockを削除
$ sudo rm -rf mysql.sock mysql.sock.lock
mysql.sockがあったら削除しておきます。
あるかどうかわからない人はとりあえずコマンド打っておきましょう。ファイルがなければ何もおきないし、あったら削除されるだけです。
5.不要なプロセスを削除
$ ps aux | grep mysql
27068 0.0 0.0 4268040 792 s001 S+ 12:31AM 0:00.00 grep mysql
$ kill 27068
いらないプロセスはkill
していきます(ユーザー名のプロセスはしなくていいです。)
_mysqlや他のプロセスがあったらkill
しておきましょう。
6.MySQLを再インストール
$ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
Updated 83 formulae.
==> Downloading https://homebrew.bintray.com/bottles/mysql-8.0.22.mojave.bottle.tar.gz
Already downloaded: /Users/username/Library/Caches/Homebrew/downloads/4a60667753e025faabe79e025a2f0a91ada50edf673388afad377e4489448ad2--mysql-8.0.22.mojave.bottle.tar.gz
==> Pouring mysql-8.0.22.mojave.bottle.tar.gz
==> /usr/local/Cellar/mysql/8.0.22/bin/mysqld --initialize-insecure --user=username --base
==> Caveats
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.22: 294 files, 292MB
homebrewでMySQLを再インストールできました。
本当に再インストールできているのか確認してみます。
$ which mysql
/usr/local/bin/mysql
ちゃんとできていますね。
7.MySQLを起動
再インストールできたのでMySQLを起動してみます。
$ mysql.server start
Starting MySQL
. SUCCESS!
起動したよおおおおおおおおおやったあああああああああああ
本当に起動しているか確認してみます。
$ mysql.server status
SUCCESS! MySQL running (28596)
起動していますね!
早速ログインしてみます!
mysql -uroot -p
にすると「パスワード付きでログイン」という意味になりますが、初期状態ではパスワードを何も入力せずにエンターを押すとログインできるので-p
でログインしてもしなくてもほぼ同じです。
$ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.22 Homebrew
Copyright (c) 2000, 2020, 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>
ログインもできた!
再インストールしてちゃんと起動しログインもできるようになったみたいです!やったあああああああああああ
ちなみにMySQLから抜けるにはquit
と入力します。ctrl + Dでも抜けられます。
mysql> quit
Bye
これでok!
8.MySQLを停止する
mysql.server start
をしたら停止するのを忘れずに。
$ mysql.server stop
Shutting down MySQL
. SUCCESS!
停止できました。
なお、ここで紹介した方法は以下の記事を参考にしました。感謝。
僕はこんな感じで直ったので、まだ試してない人はやってみると案外あっけなく直るかもしれないです。
mariadbをインストール→アンインストールしている経緯
これは関係あるか正直わからないですが、僕は独習phpをやっていて一度mariadbをインストールした経緯があります。
MySQLを一度アンインストール→再インストールする前にbrew info mysql
というコマンドを叩いてみたところ、mariadbとコンフリクトしている的な記述が出ました。
$ brew info mysql
mysql: stable 8.0.22 (bottled)
Open source relational database management system
https://dev.mysql.com/doc/refman/8.0/en/
Conflicts with:
mariadb (because mysql, mariadb, and percona install the same binaries)
percona-server (because mysql, mariadb, and percona install the same binaries)
/usr/local/Cellar/mysql/8.0.16 (275 files, 269.8MB)
Poured from bottle on 2019-05-21 at 00:16:04
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/mysql.rb
License: GPL-2.0
==> Dependencies
Build: cmake ✘
Required: openssl@1.1 ✔, protobuf ✘
==> Caveats
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
==> Analytics
install: 87,166 (30 days), 217,573 (90 days), 813,976 (365 days)
install-on-request: 85,252 (30 days), 212,240 (90 days), 785,249 (365 days)
build-error: 0 (30 days)
5行目、Conflicts with:
から始まっている部分ですね。
もしかしたらこれが原因という可能性もあるかも?ということでもう少し深掘りしてみます。
MySQLを一度アンインストール→再インストールする前の話なのでMySQL自体はインストールされている状態ですが、とりあえずbrew install mysql
を打ってみるとこんな感じで出ました。
$ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/services).
==> New Formulae
chars glab linux-headers wangle
checkov gosec markdownlint-cli xbitmaps
condure isl@0.18 rm-improved xterm
dog kube-linter showkey yh
dotenv-linter lab strace
easy-rsa libxp tree-sitter
==> Updated Formulae
Updated 460 formulae.
==> Deleted Formulae
ori pgplot
==> Downloading https://homebrew.bintray.com/bottles/protobuf-3.13.0_1.mojave.bottl
Already downloaded: /Users/username/Library/Caches/Homebrew/downloads/6474852d19fdd2b6d927a7b6164b06ec84cb95369a36898659f9422f89ef518e--protobuf-3.13.0_1.mojave.bottle.tar.gz
==> Downloading https://homebrew.bintray.com/bottles/mysql-8.0.22.mojave.bottle.tar
Already downloaded: /Users/username/Library/Caches/Homebrew/downloads/4a60667753e025faabe79e025a2f0a91ada50edf673388afad377e4489448ad2--mysql-8.0.22.mojave.bottle.tar.gz
Error: Cannot install mysql because conflicting formulae are installed.
mariadb: because mysql, mariadb, and percona install the same binaries
Please `brew unlink mariadb` before continuing.
Unlinking removes a formula's symlinks from /usr/local. You can
link the formula again after the install finishes. You can --force this
install, but the build may fail or cause obscure side effects in the
resulting software.
Error: Cannot install mysql because conflicting formulae are installed.
と出ている感じからしてやっぱりコンフリクトしている?(ちなみにperconaもデータベースの一種。多分)
その下を見るとPlease `brew unlink mariadb` before continuing.
と書いてありますね。とりあえず言われた通りに実行。
$ brew unlink mariadb
Unlinking /usr/local/Cellar/mariadb/10.5.6... 203 symlinks removed
mariadbの203個のシンボリックリンクが解除されたみたいです。
ちなみにbrew unlink
っていうのはシンボリックリンクを解除するhomebrewのコマンドらしいです。
シンボリックリンクとはwindowsのショートカットみたいなもので、本体との中継(代理)をしてくれるファイルです。シンボリックリンク自体は削除しても本体には全く影響ないし、どこに作っても問題ないらしいです。
参考>>シンボリックリンク (symbolic link)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
この後もう一度brew install mysql
をして確認してみたところ、コンフリクトエラーは無くなっていました。
MySQLが起動できないエラーに関係あるかはわかりませんが、とりあえず書き残しておきます。
今まで遭遇したエラーと試したことまとめ
ここからは今まで遭遇したエラーと試したこと(直らなかったですが)を書いていきます。ついでに参考にした記事も載せます。
他の人はもしかしたら直るかもしれないので、エラー解決のヒントにでも役立ててください。
1.Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
$ mysql -u root -p
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
よくみるmysql.sock(2)っていうエラーですね。
sockファイルを作ることで解決できることがあるみたいです。というわけで早速作る。
$ sudo touch /tmp/mysql.sock
そして再起動する。
$ sudo mysql.server restart
Can't connect to local MySQL server through socket '/tmp/mysql.sock'(38)
しかし、今度は(2)が(38)に変わっただけ。うーん。
>>localhostでMySQLが起動しない(Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2))
>>mysqlが起動できない(Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2))
2.Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (38)
引き続きmysql.sock(38)エラーを直したい。
調べた感じだと権限を付与すればいけるみたいです。
というわけでchown
で権限を付与します。sudo
をつけないとパーミッションで弾かれるので注意。
$ sudo chown -R _mysql:_mysql /usr/local/var/mysql
再起動してみる。
mysql.server restart
ERROR! The server quit without updating PID file (/usr/local/var/mysql/usernoMacBook-puro.local.pid).
しかしまたエラー。「PIDファイルがないよ!」というこれまた有名なエラーですね。うーん。
3.ERROR! The server quit without updating PID file
引き続きPIDファイルエラーを直していきます。
調べると
- 他のプロセスをkillする
- PIDファイルを自分で作る
という2つの解決策があるみたい。
まずは他のプロセスをkill
してみる。
$ ps aux | grep mysql
27068 0.0 0.0 4268040 792 s001 S+ 12:31AM 0:00.00 grep mysql
$ kill 27068
これはMySQLを再インストールする時でも出てきましたが、ユーザー名やmysqlのプロセス以外で動いているプロセスがあったらkill
します。
しかし変化なし。うーん。
続いて「PIDファイルを自分で作る」を試してみる。sudo
を入れないとPermission denied!となるので入れる。続けてMySQLスタート。
$ sudo touch /usr/local/var/mysql/usernoMacBook-puro.local.pid
$ mysql.server start
Starting MySQL
./usr/local/Cellar/mysql/8.0.22/bin/mysqld_safe: line 144: /usr/local/var/mysql/usernoMacBook-puro.local.err: Permission denied
rm: /usr/local/var/mysql/usernoMacBook-puro.local.pid: Permission denied
2020-11-11T17:49:18.6NZ mysqld_safe Fatal error: Can't remove the pid file:
/usr/local/var/mysql/usernoMacBook-puro.local.pid.
Please remove the file manually and start /usr/local/Cellar/mysql/8.0.22/bin/mysqld_safe again;
mysqld daemon not started
/usr/local/Cellar/mysql/8.0.22/bin/mysqld_safe: line 144: /usr/local/var/mysql/usernoMacBook-puro.local.err: Permission denied
ERROR! The server quit without updating PID file (/usr/local/var/mysql/usernoMacBook-puro.local.pid).
なんだかよくわからないことになってしまいました。
最終行にある通りPIDファイルのエラーも消えてないし、なんならエラー増えてる。よくわからないので元に戻す意味でとりあえずPIDファイルを削除しておきます。
また、別パターンのエラーも出ました。
$ sudo touch /usr/local/var/mysql/usernoMacBook-puro.local.pid
$ sudo mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/wagayuuninnoMacBook-puro.local.pid).
PIDファイルを作ったら直るとネット記事に書いてあったので作りましたが、全く何も変わりませんでした。うーん。
>>mysql error “MySQL server PID file could not be found!”
>>mysql 起動時のThe server quit without updating PID file エラーの回避法
とまあこんな感じです。結局MySQLの再インストールで直ったのでまあまあって感じ。
MySQLで遭遇するエラーはsock(2)エラーとsock(38)エラーとPIDファイルのエラーの3つが多いみたいですね。色々記事を漁って試しましたが、結局再インストールが最強なのかも。
終わりに
MySQLが起動しないエラーは人それぞれ解決策が違うと思うので色々試してみるといいと思います。
今回の僕の場合はMySQLをアンインストールする方法で直りましたが、sockファイルやPIDファイルなどをいじって直ることもあるみたいなので、とにかく色々試してみてください。
色々試したけど解決できない場合は一度アンインストールして、再インストールするのがいいんじゃないかなと思います。
この記事がエラー解決のヒントになったら幸いです。頑張ってくださいね。