mariadb mysql -u root -p 顯示Access denied解決辦法


問題

在ubuntu下執行mysql -u root -p顯示:

'Access denied for user 'root'@'localhost' (using password: YES)'

應該算是經典問題,stackoverflow上有很多高票回答,這樣報錯的原因應該是密碼不對。解決方式無外乎是通過skip-grant-tables繞開密碼登陸mysql,然后修改密碼。

參考:https://stackoverflow.com/questions/41645309/mysql-error-access-denied-for-user-rootlocalhost

解決辦法

1、執行:

$ sudo mysqld_safe --skip-grant-tables --skip-networking

注意staoverflow中參考的代碼在networking后還有個&,我的電腦上沒有&但是生效了。之前敲$ sudo mysqld_safe --skip-grant-tables &也沒生效,不知道為什么。

2、這時mariadb應該不需要密碼可以直接進了:

$ mysql -u root

3、進去之后我們需要改密碼,改密碼前先刷新數據庫,大小寫無所謂:

mysql> FLUSH PRIVILEGES;

這時報錯:

 

不要方,這也不是什么大問題,就是名為'procs_priv'的表損壞了。

5、修復table,修復前先找到這張表屬於哪個database下,我的openstack的mariadb的這張表屬於 'mysql' 數據庫下。OK,回顧以下mysql基本操作:

修復表格參考:

https://syslint.com/blog/tutorial/got-error-130-incorrect-file-format-some_table-mysql-issue-fix/

https://forums.mysql.com/read.php?34,164324=

4、驗證效果,重新刷新數據庫,成功:

5、改密碼

接着看之前參考skip命令的那條stackoverflow的高票回答,給了幾種改密碼的方式,但是對我都不適用:

基本上都是因為使用--skip-grant-tables進的mariadb,屬於匿名用戶:

6、匿名用戶下修改密碼

嘗試了這里的方案:https://ourcodeworld.com/articles/read/704/how-to-change-the-password-of-a-mysql-user-from-the-command-line,無效;

 后來嘗試了這里的方案,成功:https://help.ubuntu.com/community/MysqlPasswordReset

改root賬戶的密碼,改所有遠程連接到mariadb的用戶的密碼:

具體操作的時候,本來應該3,4配套,3不生效故使用5,5生效6不生效,故改用4,敲完這些就可以退出數據庫了,效果如下:

6、重啟mariadb

7、驗證

還嘗試過的方案

1、參考上述url在配置文件里添加--skip-grant-tables:我的mysql目錄下配置文件眾多,在一般認為的配置文件my.cnf里又導入了兩個目錄下的配置文件,反正都改了也沒生效;

2、在終端中輸入:

$ sudo mysqld_safe --skip-grant-tables &

之后使用$ mysql -u root是進不去的,后來發現使用上面那條有效的命令,有時也是不能不用密碼進mariadb,猜測之前使用這條命令不生效,有可能是命令不對,也有可能是mariadb時好時壞吧

3、查看錯誤日志

因為嘗試上面兩種方法一直無果我想的是通過查看mariadb日志找報錯原因。

參考官方:https://mariadb.com/kb/en/library/error-log/

官方的說法是如果你不指定log位置,那么錯誤日志在datadir這個路徑下,datadir是mariadb的一個全局變量,進入mariadb后可以通過命令行顯示datadir的實際路徑,但問題就是進不去啊,進不去就看不了路徑;

那么指定log位置吧,進入配置文件后定義error_log,不管是自定義路徑下的文件名是已存在的,還是新建的,重新mysql -u root -p時log總是空的。

事后分析原因:錯誤日志是在數據庫mariadb啟動或運行時發生錯誤才會打日志,進不去mariadb是因為密碼不對的原因,數據庫本身是能啟動的,所以可能正常來說就是不會產生log。

順便學到的mysql/mariadb知識小結

 1、openstack中用到的Mysql的配置文件目錄

mysql配置文件my.cnf位置:/etc/mysql/my.cnf
my.cnf最后兩行有
!includeddir /..../
把該目錄下的所有配置文件都導入進來了
2、openstack用到的Mysql的log位置:
/var/log/mysql
如果sudo CLI進不去,可以用sudo -s進去
3、數據庫只運行在控制節點上
4、mariadb屬於Mysql的一個分支,所以很多時候顯示的是mysql,比如命令行中出現的很多都是mysql。辨別數據庫是mysql還是mariadb,可以這樣:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM