我正在尝试弄清楚如何重置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)
我甚至尝试在文件中使用“刷新”来重置密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
flush privileges;
答案1
您可以尝试跳过完全加载授权表,而不是尝试重置 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
答案2
尝试这个:
grep 'A temporary password is generated' /var/log/mysqld.log | tail -1
然后运行以下命令在 MySQL 服务器上应用安全性。只需执行以下命令并按照安全向导的提示进行操作:
sudo mysql_secure_installation
按照屏幕上的说明进行操作。更改您的 root 帐户密码,然后按 Y 执行所有其他操作以应用改进的安全性。
更改 root 密码? – 按 y 并更改 root 密码
删除匿名用户?按 y 禁止 root 远程登录?按 y
删除测试数据库并访问它?(按 y 现在重新加载权限表?按 y
答案3
在尝试使用 启动 mysql 进程之前,您是否停止了该进程mysqld
?可能是因为 mysql-daemon 已在运行,因此 init 文件从未执行。尝试关闭 mysqld,然后重复该过程。