【MySQL】mysql root密碼忘記怎麽辦?
阿新 • • 發佈:2018-02-28
數據庫運維MySQL忘記密碼了怎麽解決
筆者曾經有一次誤刪了mysqlroot用戶,怎麽辦?
之前的解決方式是通過忽略授權表的方式重啟mysql然後插入相關數據解決該問題的,但是這種方式需要重啟mysql,會影響現有業務,那麽有沒有其他方式可以不重啟MySQL就解決呢?
因為mysql的user表示MyISAM引擎的,因此我們可以通過修改對應的文件來解決這個問題。下面是本人在測試環境的一次演練,僅供參考。
一、查看現有用戶
04:18:34 root@localhost [mysql]>select user,host from user; +---------------+-----------+ | user | host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ 3 rows in set (0,00 sec)
二、刪除本地root用戶
04:18:59 root@localhost [mysql]>drop user root@‘localhost‘;
三、再次查看用戶
04:20:02 root@localhost [mysql]>select user,host from user; +---------------+-----------+ | user | host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | +---------------+-----------+
現在我們開始恢復用戶數據
四、移動user表相關文件
[root@localhost mysql]# cp user.* /vagrant/mysql/3307/data/test/
五、登錄另一個實例並查看user表
04:23:53 root@localhost [(none)]>use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed 04:23:56 root@localhost [test]>show tables; +----------------+ | Tables_in_test | +----------------+ | user | +----------------+ 1 row in set (0,00 sec) 04:23:58 root@localhost [test]>select * from user\G *************************** 1. row *************************** Host: localhost User: mysql.session Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: Y Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: *C7A1AAE2D250AFD864050FAF4935EF6F5D185A92 password_expired: N password_last_changed: 2018-02-23 13:19:12 password_lifetime: NULL account_locked: Y *************************** 2. row *************************** Host: localhost User: mysql.sys Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 0 plugin: mysql_native_password authentication_string: *C7A1AAE2D250AFD864050FAF4935EF6F5D185A92 password_expired: N password_last_changed: 2018-02-23 13:19:26 password_lifetime: NULL account_locked: Y 2 rows in set (0,00 sec)
六、把本實例的root用戶插入剛剛移動過來的user表
04:25:03 root@localhost [test]>insert into user select * from mysql.user where user = ‘root‘ and host =‘localhost‘;
Query OK, 1 row affected (0,02 sec)
Records: 1 Duplicates: 0 Warnings: 0
七、再次移動user文件到原先的位置
[root@localhost test]# cp user.* /vagrant/mysql/3306/data/mysql
八、重新加載配置到內存
[root@localhost test]# kill -HUP `pidof mysqld`
通過該步mysql並不會重啟,對應用不會有影響
九、重新登錄,OK
[root@localhost test]# mysql -uroot -p -S /tmp/mysql3306.sock
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.7.21-log MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
04:30:57 root@localhost [(none)]>
【MySQL】mysql root密碼忘記怎麽辦?