1. 程式人生 > >解決:MySQL 報錯:1045- Access denied for user 'root'@'localhost'(using password YES)

解決:MySQL 報錯:1045- Access denied for user 'root'@'localhost'(using password YES)

一、前言

今年瘋狂迷上了開源,只要看到好的開源專案,就會不顧一切一股腦扎進去研究,五一期間發現一個很好的關於眾籌的開源專案,但不巧,這個專案竟然是 PHP 寫的,沒學過 PHP,自然對這個開源專案毫無頭緒了,但我竟然為了這個專案,毅然決定入坑 PHP,於是就出事了…

說時遲那時快, 2 小時入門 PHP,2 小時入門 ThinkPHP,鑑於我一直在研究 Java 的原因,所以不費吹灰之力就順利入坑。通過了解,PHP 開發必備環境是 PHP、Apache、MySQL以及一個好用的 IDE ,IDE 還是很好找的,我選擇了 JetBrains 的 PhpStorm,而其他環境就是集全部功能於一身的 WampServer 了,安裝完準備建資料庫建表,開啟 Navicat ,錯誤開始…

二、錯誤描述

MySQL 報錯:1045- Access denied for user 'root'@'localhost'(using password YES)

如下圖所示:

三、錯誤原因

安裝了 WampServer 這個集 PHP 開發環境於一身的神器後,裡面的 MySQL 網頁管理軟體 phpMyAdmin 使得資料庫的 root 使用者許可權發生改變,也可以說是由於兩者的密碼不一致導致密碼錯亂有了這個錯誤(我自己理解),因為 phpMyAdmin 安裝完成後的預設密碼是空的。

四、錯誤解決

直接充值密碼即可解決資料這個報錯問題。

首先,停止掉資料的執行,這個我相信大家都可以做到了,可以直接從管理服務程式中停止,也可以直接在 cmd 命令視窗輸入命令 net stop mysql 來停止。

然後進入 MySQL 的安裝路徑,找到並開啟 my.ini 檔案,找到 [mysqld] 欄位,在這個欄位下面增加下面這個語句:

skip_grant_tables

緊接著重啟資料庫,這個我相信大家也可以做到了,可以直接在管理服務程式中開啟,也可以直接在 cmd 命令視窗中輸入命令 net start mysql 來開啟,進而在命令視窗執行一下命令,重置密碼:

update user set password='root' where user='root'

當然,我是直接將密碼重置為 root,反正這個密碼大家自定義就好,不過要記住密碼。

最後就是再次停止資料庫的執行,返回前面提到的 my.ini 檔案去掉 skip_grant_tables 欄位後儲存,再次重啟資料庫就可以成功解決這個 MySQL 的報錯了。

五、問題繼續

我在第四部完美的解決了命令視窗啟動進入資料的這種報錯,然後當我重新進入 Navicat 開啟本地建立的連線的時候,繼續報同樣的錯誤,也就是說錯誤並沒有解決,很納悶,為啥命令列可以順利操作資料庫不報錯,進入 Navicat 客戶端就報錯呢?

折騰半天,發現在 root 許可權錯亂而重置密碼之後,在 Navicat 中已經建立的連線是不可逆的。

折騰半天,發現解決辦法也很簡單,要麼刪除連線後重新建一個連線,當然,刪除連線後並不會已經建立的資料庫,要麼重灌 Navicat ,至於選哪一種,自行選擇,我都試過,都可以成功解決 Navicat 報這個錯誤。

六、問題再來

當本地的錯誤完美解決之後,我開啟 phpMyAdmin 網頁,竟然報了一個與前面的錯誤很相似卻又有異的錯誤,錯誤如下:

1045- Access denied for user 'root'@'localhost'(using password NO)

當我把本地的 phpMyAdmin 配置檔案中的密碼也設定為 MySQL 資料庫的密碼後,開啟後還是繼續報同樣的錯誤,不斷開啟不斷報錯,又折騰半天,最後在 StackOverFlow 上找到了解決辦法:直接清除瀏覽器的 Cookie 快取就可以解決這個問題。也就是說,我本地的配置是沒有任何錯誤的,而開啟網頁繼續報錯的原因是之前報錯時瀏覽器已經把 phpMyAdmin 的登入密碼快取到了 Cookie之中。

好了,所有問題完美解決,特此記錄。

解決完這個問題我們明白,如果遇到某些錯誤精心想想,而不是一股腦扎進錯誤之中研究錯誤,可能半小時就可以解決問題了,也不至於折騰一個半天后又折騰一個半天咯。

掃描二維碼關注微信公眾號,瞭解更多