1. 程式人生 > >關於 Mac OS 本地安裝 Mysql 的一些坑

關於 Mac OS 本地安裝 Mysql 的一些坑

前言

為了專案需要,在自己的 Mac Os 上裝了 Mysql,結果各種報錯,啟動不了、登入不了、無法修改密碼、圖形化連不上等等。這兒做下記錄,方便自己和其他人查閱。

安裝常規步驟

訪問MySQL的官網 http://www.mysql.com/downloads/ 然後在頁面中會看到“MySQL Community Server”下方有一個“download”點選。
blog.csdn.net/never_cxb

blog.csdn.net/never_cxb
選中合適的版本和平臺下載 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 按鈕是無效的,點了很多次都沒用。

android

報錯 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)