手機版
你好,游客 登錄 注冊
背景:
閱讀新聞

MySQL提示ERROR 1698 (28000): Access denied for user 'root'@'localhost'錯誤解決辦法

[日期:2019-08-07] 來源:Linux公社  作者:醉落紅塵 [字體: ]

測試的Linux操作系統是Ubuntu 18.04 LTS,MySQL版本如下:

[email protected]:~/www.nluszu.live$ mysql --version
mysql  Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using  EditLine wrapper

MySQL提示ERROR 1698 (28000): Access denied for user

安裝完成后,登錄MySQL時出現如下錯誤:

[email protected]:~/www.nluszu.live$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

MySQL提示ERROR 1698 (28000): Access denied for user

因為安裝的過程中沒讓設置密碼,可能密碼為空,但無論如何都進不去MySQL。

那么該怎么做呢,接下來就將這個解決方法總結記錄一下。

第1步:

在Ubuntu終端輸入如下命令

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

進入到mysqld.cnf配置文件,然后在這個配置文件中的[mysqld]這一塊中加入skip-grant-tables這句話。

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir        = /usr
datadir        = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
skip-grant-tables

MySQL提示ERROR 1698 (28000): Access denied for user

作用:就是讓你可以不用密碼登錄進去MySQL。

保存:wq,退出。

輸入如下命令:

[email protected]:~/www.nluszu.live$ service mysql restart

重新啟動MySQL。如下圖:

MySQL提示ERROR 1698 (28000): Access denied for user

第2步:

在Ubuntu終端上輸入

[email protected]:~/www.nluszu.live$ mysql -u root -p

遇見輸入密碼的提示直接回車即可,進入MySQL后,分別執行下面三句話:

[email protected]:~/www.nluszu.live$ use mysql;  #然后回車

[email protected]:~/www.nluszu.live$ update user set authentication_string=password("linuxidc") where user="root";  #然后回

說明:本例的密碼是linuxidc

[email protected]:~/www.nluszu.live$ flush privileges;  #然后回車

結果如下圖:

MySQL提示ERROR 1698 (28000): Access denied for user

然后輸入quit,退出MySQL

第3步:

重新進入到mysqld.cnf文件中去把剛開始加的skip-grant-tables這條語句給注釋掉。如下圖:

MySQL提示ERROR 1698 (28000): Access denied for user

再返回終端輸入mysql -u root -p,應該就可以進入數據庫了。

第4步:

如果此時還是報出錯誤如下

[email protected]:~/www.nluszu.live$ mysql -u root -p
Enter password:
ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded

MySQL提示ERROR 1698 (28000): Access denied for user

那么就需要返回第3步中,把注釋掉的那條語句重新生效(就是刪除#符號),重新進入mysql中,先選擇一個數據庫(use mysql;),然后輸入select user,plugin from user;,看下圖:

MySQL提示ERROR 1698 (28000): Access denied for user

從圖中可以看到在執行了select user,plugin from user;后,錯誤原因是因為plugin root的字段是auth_socket,那我們改掉它為下面的mysql_native_password就行了。輸入:

update user set authentication_string=password("linuxidc"),plugin='mysql_native_password' where user='root';

然后回車執行以下,再輸入select user,plugin from user;回車,我們能看到root用戶的字段改成功了。如下圖:

MySQL提示ERROR 1698 (28000): Access denied for user

最后quit退出。返回執行第3步。

那么這個問題就完全解決了。

拓展更新:

在MySQL 8版本中,上面更新代碼的語句似乎有所變化,那個句法會被告知是錯誤的,這里我貼一下沒有語法錯誤的:

ALTER user 'root'@'localhost' IDENTIFIED BY 'newpassward'; //newpassward 新密碼

將這句話對應到上面第二步即可。

如果執行本語句出現The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen這個錯誤,解決如下:

先flush privileges,然后再執行上面修改密碼的語句。

Linux公社的RSS地址http://www.nluszu.live/rssFeed.aspx

本文永久更新鏈接地址http://www.nluszu.live/Linux/2019-08/159900.htm

linux
相關資訊       MySQL ERROR 1698 (28000) 
本文評論   查看全部評論 (0)
表情: 表情 姓名: 字數

       

評論聲明
  • 尊重網上道德,遵守中華人民共和國的各項有關法律法規
  • 承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
  • 本站管理人員有權保留或刪除其管轄留言中的任意內容
  • 本站有權在網站內轉載或引用您的評論
  • 參與本評論即表明您已經閱讀并接受上述條款
彩票投注骗局