2013-01-18 39 views
0

所以即時得到非常普遍的ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) MySQL錯誤時。我已經嘗試了論壇上的所有典型修復,通過mysql_safe方法登錄,然後嘗試重置我的root密碼。但是,當這樣做時,它返回;正確的MySQL的語法錯誤創建用戶

UPDATE user SET password=PASSWORD("PASSWORD")WHERE user="root"; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 0 Changed: 0 Warnings: 0 

因此,現在的行受到影響,我認爲沒有用戶真正改變。我試圖創建一個用戶:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'root' 
    -> GRANT ALL ON *.* TO 'root'@'localhost' 
    -> flush privileges; 

However this returns with ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GRANT ALL ON *.* TO 'root'@'localhost' 

看到當前用戶是什麼:

mysql> SELECT user(); 
+--------+ 
| user() | 
+--------+ 
| [email protected] | 
+--------+ 

我認爲語法錯誤是,沒有一樣是「根」後,@後的事實。我如何編輯這些信息爲root @ localhost並糾正問題?

UPDATE

仔細閱讀mysqld的文檔,我得到這個部分,其完美地工作了。

停止mysqld的與使用--skip-grant-tables選項重啓。這使任何人都可以在沒有密碼的情況下連接所有權限。由於這是不安全的,因此您可能希望將--skip-grant-tables與--skip-networking一起使用,以防止遠程客戶端連接。

連接到使用此命令mysqld服務器:

shell> mysql 

問題在MySQL客戶端下面的語句。將密碼替換爲您要使用的密碼。

mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') 
    ->     WHERE User='root'; 
mysql> FLUSH PRIVILEGES; 

FLUSH語句會通知服務器將授權表重新加載到內存中,以便通知密碼更改。

+1

你爲什麼不使用'SET PASSWORD'呢?這自動執行'沖洗privileges':http://dev.mysql.com/doc/refman/5.5/en/set-password.html –

回答

0

應該是三個SQL語句,

CREATE USER 'root'@'localhost' IDENTIFIED BY PASSWORD 'root'; 
GRANT ALL ON *.* TO 'root'@'localhost'; 
FLUSH PRIVILEGES; 
+0

這是否會覆蓋現有的不正確的陳述 – dodgerogers747

+0

@ dodgerogers747肯定。 –

+1

你也可以使用'ALTER' –