在配一個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,要知道,這倆系統差好多好多呢。坑爹。