1. 程式人生 > >MySQL誤刪root使用者導致無法登陸解決方法

MySQL誤刪root使用者導致無法登陸解決方法

測試環境

刪除前
 mysql> select user,host,password from mysql.user;
 +------+-----------+-------------------------------------------+
 | user | host      | password                                  |
 +------+-----------+-------------------------------------------+
 | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
 | root | jinch     |                                           |
 | root | 127.0.0.1 |                                           |
 | root | ::1       |                                           |
 | test | 10.0.0.%  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
刪除root使用者
 mysql> drop user [email protected]'localhost';
 為了測試,把其他root相關都刪除了,命令就不一一展示了,顯示結果。

刪除後

 mysql> select user,host from mysql.user;
 +------+-----------+
 | user | host      |
 +------+-----------+
 | test | localhost |
 +------+-----------+
 1 row in set (0.00 sec)
退出再登陸
 [[email protected] ~]# mysql -uroot -p
 Enter password: 
 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
 現在已經無法登陸了,之前誤刪過一次。。。無奈那會兒不知道如何解決,就只能重灌了,但是,經過一段時間的學習,發現並不是沒有解決辦法的。

解決方法

首先,關閉資料庫

 service mysqld stop

用安全模式設定開啟免密登陸

 mysqld_safe --skip-grant-tables --skip-networking 
 --skip-grant-tables  關閉連線層的驗證模組
 --skip-networking    關閉遠端連線資料庫(只允許本地登陸,可設定防火牆達到相同效果)
 
 [
[email protected]
~]# mysqld_safe --skip-grant-tables 181010 16:57:03 mysqld_safe Logging to '/usr/local/mysql/data/jinch.err'. 181010 16:57:04 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

執行完命令後你會發現它會一直霸佔這個視窗,這是你可以加個 & 讓他在後臺執行

然後使用mysql命令就可以直接進入資料庫
進入之後,使用insert 命令重新插入表
 mysql> insert into user(user,host,password,ssl_type,ssl_cipher,x509_issuer,x509_subject) values('root','localhost',PASSWORD('123'),'','','','');
 PASSWORD大寫的原因:在mysql中密碼都是密文的,所以這裡是呼叫一個函式,將明文加密成密文。
然後退出重啟一下資料庫就可以重新使用賬號密碼登入了
 mysql> quit
 Bye
 [[email protected] ~]# /etc/init.d/mysqld restart     
 [[email protected] ~]# mysql -uroot -p123
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
 mysql>  --這邊就放一部分啦,
誤刪root使用者無法登陸的解決就到這裡啦
附贈忘記密碼如何修改

5.6和5.6以前版本:

 update mysql.user set password=PASSWORD('123') where user='oldboy' and host='10.0.0.%';
 flush privileges;

5.7以上版本:

 update mysql.user set authentication_string=PASSWORD('123') where user='oldboy' and host='10.0.0.%';