在MySQL 8中重置root管理员密码

・4 分钟阅读

问题

我正在尝试如何重新设置root mySQL用户的密码,我找到了:

https://www.tecmint.com/reset-root-password-in-mysql-8/

我尝试了第一种方法,它似乎可以正常工作:


root@admin:~# cat /tmp/init-file.txt


ALTER USER 'root'@'localhost' IDENTIFIED BY 'testPASS';


root@admin:~#



然后我运行:


root@admin:~# mysqld --user=mysql --init-file=/tmp/init-file.txt --console



root@admin:~#



但是,当我尝试使用新密码登录时,我得到了:


root@admin:~# mysql -uroot -p


Enter password:


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



我做错了什么?我以前从来没有重置过root密码,所以,我不确定我是否做了一些愚蠢的事情,

更新:有趣的是,即使我正在做"service mysql stop",它似乎仍然在运行:


root 4992 0.0 0.0 52700 3904 pts/0 S 15:33 0:00 sudo mysqld_safe --skip-grant-tables


root 4993 0.0 0.0 4504 1720 pts/0 S 15:33 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables


mysql 5580 1.1 15.8 10668984 1291760 pts/0 Sl 15:33 0:10 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --open-files-limit=2048 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306



我怎么才能完全杀死它?

更新2:

即使确保mysql完全关闭,它仍然无法正常工作:


root@admin:~# mysqld --user=mysql --init-file=/tmp/init-file.txt --console


root@admin:~# service mysql start


root@admin:~# mysql -uroot -p


Enter password:


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



我甚至在文件中尝试了"flush"来重置密码:


ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';



flush privileges;




回答1:

试图启动mysqld之前是否停止了mysql进程?可能是mysql守护进程已经运行,因此从未执行init文件,尝试关闭mysqld,然后重复该过程。


回答2:

你可以尝试跳过加载grant-tables,然后把root密码设置为空,而不是尝试重置root密码。


sudo mysqld stop


mysqld --skip-grant-tables --user=mysql &


mysql


FLUSH PRIVILEGES;


ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';


quit;


service mysql start



或者,如果你想使用脚本文件:


mysqld stop


mysqld --skip-grant-tables --user=mysql &


mysql < init_file.txt


mysqld stop


service mysql start




Xuanlv profile image