1045 access denied…… 錯誤的解決方法

    在配一個web服務器的時候,遇到了 php

    1045 access denied for user 'root'@'localhost' using password yes mysql

錯誤,下面說一下個人解決辦法。 web

    centos6.6,mysql5.1,web環境所有是yum安裝。 sql

    裝完web環境後,遠程navicat鏈接報1130錯誤,這是確定的,mysql默認不容許遠程鏈接,因此修改mysql表中host字段爲%,默認密碼爲空,登陸的時候回車就好了: shell

mysql -u root -p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>flush privileges;
mysql>select host, user from user;

    修改完之後,從本地navicat能夠登陸了,而後把數據庫導入服務器中,並把web程序上傳到服務器的web目錄下。 數據庫

    當打開web的時候,會出現1045 access denied for user 'root'@'localhost' using password yes錯誤,開始我覺得是web裏面的數據庫密碼錯了,但不是,並且遠程myslq能夠鏈接啊,這是怎麼回事。難道是默認密碼不能爲空?也不對,由於外部能夠訪問mysql。從網上百度了方法,也是修改密碼而已。 centos

# /etc/init.d/mysql stop 
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & 
# mysql -u root mysql 
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; 
mysql> FLUSH PRIVILEGES; 
mysql> quit 
# /etc/init.d/mysql restart 
# mysql -uroot -p 
Enter password: <輸入新設的密碼newpassword> 
mysql>

改完密碼,仍是不行,外部重設密碼之後依然能訪問,本地仍是不能訪問,爲這個問題,弄了好幾個小時,晚上8點了,一輩子氣,不弄了,走人。次日(週六)加班弄這個(5分鐘搞定了)。 安全

上面有三個用戶(默認5個,還有兩個匿名用戶,安全起見我刪掉了,對本教程無影響),這是我修改完之後表,修改前是這個樣子的,我就不改回去了,寫寫能明白就好了: 服務器

localhost root 運維

主機名字   root

127.0.0.1 root

前面說過,剛裝完之後遠程鏈接報1130,因此把用sql語句改爲了把host改爲了%,就是由於這個,粗枝大葉,這個語句只把第一個root改爲了%,變成這樣:

% root

主機名字   root

127.0.0.1 root

按理說應該%號了,應該本地、遠程都鏈接纔對啊,不知道爲何不行,多是mysql版本緣由。因此要把前面的鏈接地址加一個本地的localhost(有人說了,你不是有一個127.0.0.1嗎,更坑爹,在web代碼裏面寫127.0.0.1或機子的ip以後,直接cann't connect…………,直接不能鏈接,抽時間想一想爲何這樣寫不行)。

下面具體步驟,按上面的方式,進安全模式,改回默認的host,此時本地能夠鏈接了,而後退出,重啓mysql服務,正常進入mysql,把host改爲%,此時不要退出mysql命令行,遠程navicat鏈接mysql,把host改爲一個%和一個localhost,點下面的保存按鈕:

此時,回到mysql命令行(若是已經退出mysql命令行,就從頭開始吧),刷新權限:flush privileges;

從新打開web程序,激動人心的時刻到了,能夠看到程序正常運行了。

懷疑這個問題是這個mysql版本的問題。

最後建議,開發環境和生產環境最好仍是如出一轍的好,我本地的是php5.4.3,mysql5.6的,服務器是php5.3,mysql5.1,差好多呢。原本運維說是給一個centos7,我裝了一個本地虛擬機測試沒問題,等部署的時候,居然是centos6.6,要知道,這倆系統差好多好多呢。坑爹。

相關文章
相關標籤/搜索