關於 Mac OS 本地安裝 Mysql 的一些坑
前言
為了專案需要,在自己的 Mac Os 上裝了 Mysql,結果各種報錯,啟動不了、登入不了、無法修改密碼、圖形化連不上等等。這兒做下記錄,方便自己和其他人查閱。
安裝常規步驟
訪問MySQL的官網 http://www.mysql.com/downloads/ 然後在頁面中會看到“MySQL Community Server”下方有一個“download”點選。
選中合適的版本和平臺下載 dmg
也可以使用命令列的方法用 brew 安裝 Mysql。
一般人按照上面的步驟就成功了,但是筆者很不幸,筆者的Mysql 並沒有成功執行,成功執行後並沒有能成功連線。經過一番折騰,把遇到了問題修好了,把這些坑做些記錄。
報錯 Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’
mysql 無法啟動 報下面的錯誤。
Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
解決思路:檢查這些檔案是否存在、讀寫許可權、所屬使用者等等。
最好使用 root 來啟動 mysql(使用 root 請小心謹慎)。
mysqld stop
touch /tmp/mysql.sock
// With old brew recipes
safe_mysqld restart
// With new brew recipes
mysqld_safe restart
或者試試 mysql.server start
命令。
在 System Preference 裡面有 myql 介面,上面的按鈕 Start 或者 Stop Mysql。但是很不幸,筆者的 Start 和 Stop 按鈕是無效的,點了很多次都沒用。
報錯 ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
裝完之後無法登入,是密碼的問題,方法是修改 user 表的 password。
./mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
mysql stop //或者使用殺程序的方法 kill -9 pid
mysqld_safe --skip-grant-tables //開始沒加後面的--skip-grant-tables失敗了
然後再開一個 terminal,登入進 mysql
$ ./mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.10 MySQL Community Server (GPL)
mysql> use mysql;
Database changed
mysql> update user set password=password("**passwd**") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
很多人這一步就成功了,但是筆者在這一步還是遇到了坑。
報錯 Unknown column ‘password’ in ‘field list’
錯誤資訊
mysql> update user set password=password("**passwd**") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
網上很多修改密碼都是類似的命令
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
但是很無奈,筆者的 user 表裡面沒有Password欄位,大小寫也試驗過了。
下面是 user 表的所有 field:
| Host | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | password_last_changed | password_lifetime | account_locked |
所以上面的sql 語句變成了
UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass') WHERE User='root';
報錯 reset your password using ALTER USER statement before executing this statement
能進入 mysql,但是執行任何語句都會報下面的錯誤
或者用圖形化工具連線 mysql 也會報下面的錯。
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
解決方法是重置密碼。
mysql> select 1;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> set password = password("chenxb123");
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)