【轉發】Ubuntu20.04中MySQL8.0出現ERROR(1449)

登錄mysql,使用show databases;和show tables;這兩個命令時報錯ERROR 1449,備份數據庫時報了同樣的錯誤,這樣的話卸載mysql重裝就變得非常危險。

報錯信息
ERROR 1449 (HY000): The user specified as a definer (‘mysql.infoschema’@‘localhost’) does not exist

錯誤分析
報錯信息提示用戶mysql.infoschema@localhost不存在,執行命令
select user,host from mysql.user;
然而看到mysql.infoschema用戶是存在的,這讓人一頭霧水,去搜索了一圈,說是讓使用mysql_upgrade命令,這個命令在mysql8.0已經被廢棄了,但是我們還有別的解決辦法。

兩種方案
第一種:
在終端執行
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
打開mysqld.cnf文件
在末尾鍵入以下代碼(作用是跳過mysql的登錄驗證):

skip-external-locking
skip-grant-tables

wq保存並退出,service mysql restart重啓mysql server,這樣就實現了mysql的免密登錄,在終端下輸入mysql再回車,使用show databases;命令,如果運氣好的話,應該不會再報錯了,也可以正常備份。
可是mysql免密登錄在本地還好,甚至要方便一些,但在服務端有很大的風險,沒事,還有第二種方案。
第二種:
註釋掉剛纔添加過的配置文件代碼,重啓mysql,mysql -uroot -p登錄,執行下列命令:

刪除導致報錯的用戶

DROP USER 'mysql.infoschema'@'localhost';

重新創建該用戶,密碼自己定義,留空也可以

CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY 'password';

賦予權限

GRANT ALL PRIVILEGES ON . TO 'mysql.infoschema'@'localhost' WITH GRANT OPTION;

使更改生效

FLUSH PRIVILEGES;

此時使用show databases;命令可以正常查看數據庫了,問題解決,不需要卸載重裝。

可能的問題
或許你使用了上述的方法,但發現web項目不能訪問,以wordpress爲例,會出現連接數據庫時出錯,這時在終端使用以下命令:
mysql -u wordpress -p
輸入你的密碼,應該是不能正常連接的,這與mysql8.0的新的加密方式有關,可以使用以下方式進行修正:

登錄mysql

mysql -u root -p

選擇數據庫

use mysql;

修改plugin字段

update user set plugin="mysql_native_password";

刪除原有用戶

drop user 'wordpress'@'localhost';

重新創建,密碼要跟原來的保持一致,當然也可以重新設置,然後修改項目配置文件

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';

賦予權限

GRANT all ON wordpress.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
exit;

重啓mysql服務,再次訪問web項目正常。如果你的項目有很多個,可能每一個都要修改,但是數據不會丟失。

寫在後面
暫時沒有發現是什麼導致了這個問題,試過很多方法也沒有重現,不過問題算是解決了。

來源: https://blog.csdn.net/ljc545w/article/details/109725115

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章