2017年6月28日

解決 homebrew 修正成不用 root 身份執行後,mysql 無法啟動的問題

最近手邊要管的機器太多了,想試試用 Ansible 來處理,查了一下如何安裝,網路上是推薦用 homebrew 來裝最簡單,但是在使用很久以前安裝的 homebrew 時,出現了以下錯誤訊息:

$ sudo brew update
Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.

上網查了一下相關討論,大意就是 homebrew 不要讓你用 root 執行了,網路上找到的解決辦法就是,更改 /usr/local 的權限,如下:

sudo chown -R $(whoami) /usr/local

這樣一來,homebrew 就能正常運作了,執行以下指令就不會出錯,再也不需要加上 sudo 指令了:

brew update

但是問題來了,如果原本透過 .pkg 檔案來安裝 MySQL 的話,這時 MySQL 就會無法使用了!

$ mysql -uroot -p
Enter password: 
mysql> show databases;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)

問題確認:

先查看一下 /usr/local 底下的目錄:

$ ls -al /usr/local/
total 80
drwxr-xr-x   29 mayer  wheel   986  6 28 09:55 .
drwxr-xr-x@  13 root   wheel   442  2 24 15:07 ..
drwxr-xr-x   16 mayer  admin   544  6 28 10:19 .git
......
lrwxr-xr-x    1 mayer  wheel    27  1 28  2014 mysql -> mysql-5.1.72-osx10.6-x86_64
drwxr-xr-x   16 mayer  wheel   544 12 17  2014 mysql-5.1.72-osx10.6-x86_64
drwxr-xr-x   10 mayer  admin   340 12  8  2015 opt
......

可以看到,/usr/local/ 底下有 MySQL 的目錄,由於剛剛我們改了 /usr/local 目錄底下所有目錄 owner 的關係,很可能是因為這樣出了問題。

先進入 Mac 的系統偏好設定 -> MySQL,看到正常運作中:

然後點擊 Stop MySQL Server 按鈕,會看到 MySQL 服務停止了,並且出現警告訊息:

/usr/local/mysql/data 目錄的 owner 不是 mysql 或 _mysql,可能會出問題。

問題解決:

先查看機器上,系統上有什麼樣的 mysql 使用者:

grep mysql /etc/passwd
_mysql:*:74:74:MySQL Server:/var/empty:/usr/bin/false

這邊發現到,只有一個 _mysql 這個使用者,很顯然的是在安裝 mysql 套件時一併建立的,因此我們將 /usr/local/mysql 相關的目錄更改目錄的 owner:

sudo chown -R _mysql /usr/local/mysql*

之後,在點 Start MySQL Server 按鈕,就能看到 MySQL 正常啟動了。

最後,透過 mysql command line 確認是否能正常讀取 database 了:

$ mysql -uroot -p   
mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| ..................  |
| ..................  |
| test                |
+---------------------+
27 rows in set (0.01 sec)

一切又恢復正常了!