Mac OS XをMavericksにアップグレードしたため、MySQLコマンドが「command not found」となる
ケース
Mac OS X(Mountain Lion)にインストール&設定済みのMySQLのコマンドが効かず、command not foundとなってしまう。
$ mysql -bash: mysql: command not found
以前はSequel Proからの接続もできていたのだが、何故か接続できなくなっている。Mavericksへのアップグレードが原因か?
ググってみるとMavericksへのアップグレードにより、同じようにMySQLが消えてしまうケースがいくつか見られた。やはりアップグレードが原因のようだ。
- iMacをMavericksにしたらMySQLとか消えた(復旧メモ) | ぅゎょぅι゛ょっょぃ
- Mavericksにして死んだものと、蘇生方法 - Qiita
- 拝啓、mac mavericksにしてから開発環境が死んだみなさまへ… | TowardSomethingNew
残念ながら私のPCのシステム環境設定にはMySQLがいなかった・・・。
対処
mysqlのパスを調べたが、何も出力されず・・・。
$ which mysql
とりあえずHomebrewでインストールしていたはずなので、brewコマンドで確認する。
$ brew list mysql
やはりインストール済み。Homebrewでインストールしたパッケージは/usr/local/Cellar配下に格納されるはずなので調べてみる。
$ ls /usr/local/Cellar mysql
解決方法
Homebrewでアンインストールし、再インストールすることにした。
$ brew uninstall mysql Uninstalling /usr/local/Cellar/mysql/5.6.20_1...
5.6.20_1は削除されたのだが、16と19が残ったままで、これはどうすればいいんだろう?
$ ls /usr/local/Cellar/mysql 5.6.16 5.6.19
MySQLをインストールする前に下記コマンドを実行。
$ brew update
(省略)
$ brew upgrade
==> Upgrading 2 outdated packages, with result:
mysql 5.6.20_1, pyenv 20140924
==> Upgrading mysql
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/mysql-5.6.2
######################################################################## 100.0%
==> Pouring mysql-5.6.20_1.mavericks.bottle.1.tar.gz
==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.
To connect:
mysql -uroot
To have launchd start mysql at login:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
mysql.server start
==> Summary
🍺 /usr/local/Cellar/mysql/5.6.20_1: 9578 files, 338M
(省略)
んん?ここでmysqlとpyenvがupgradeされている?
$ brew install mysql Warning: mysql-5.6.20_1 already installed $ mysql ERROR 2002 (HY000): 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'というメッセージが出力された。対処法は過去記事のとおりMySQLサーバを起動する。
$ mysql.server start Starting MySQL SUCCESS!
Sequel Proからも接続できた!
が、DBはあるもののテーブルの中身がないのか、接続できないテーブルもいくつかある。無事だったのは比較的最近にローカルのMySQLにインポートしたデータのみ。古いDBはデータの格納先が異なっていたのだろうか・・・?