ponkiti's blog

主に自分用、イベント参加メモや備忘録として利用

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が消えてしまうケースがいくつか見られた。やはりアップグレードが原因のようだ。

残念ながら私の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はデータの格納先が異なっていたのだろうか・・・?