如何在 Ubuntu 20.04 上重置 mysql-server-8.0 root 密码?

如何在 Ubuntu 20.04 上重置 mysql-server-8.0 root 密码?

我刚刚安装了 Ubuntu 20.04,但 MySQL 出了点问题。我不知道如何登录:

$ mysql -u root -p                      
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我那里没有任何数据,所以我不在乎数据库是否丢失。事实上,我更喜欢一个干净的解决方案。

我尝试过

dpkg-重新配置

这个答案

$ sudo dpkg-reconfigure mysql-server-8.0
mysqld will log errors to /var/log/mysql/error.log
mysqld is running as pid 7577

完成时没有出现错误消息,但我没有看到任何输入新密码的方法。

mysqld_safe

我试过, 但

$ sudo mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket 
'/var/run/mysqld/mysqld.sock' (2)
$ ls -alh /var/run/mysqld/           
total 0
drwxr-xr-x  2 mysql root   40 Mai 17 11:08 .
drwxr-xr-x 38 root  root 1,1K Mai 17 11:08 ..

我猜这可能是一个问题?我该怎么办?

完全重新安装

我跟着本指南完全重新安装mysql,但我遇到了同样的问题。

答案1

你可以使用这个代码

sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

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

答案2

显然我走错了路。我只需要通过

$ sudo mysql -u root

所以不是选项-p。无需密码。

答案3

MySQL 8.0 默认使用用户auth_socket密码root,这意味着安装后mysql-server-8.0您可以使用以下任一方式自动登录:

sudo mysql

或者

sudo mysql --user=root --host=localhost

root...如果您已经以 shell 身份登录,则无需指定用户root。但是,如果您以其他 sudo 用户身份登录,则可以指定该用户名(无需密码),只要 sudo 用户已作为用户添加到 MySQL 即可auth_socket

唯一需要指定密码的情况是通过 TCP 登录(例如 @127.0.0.1)。因此,如果您尝试类似操作,sudo mysql --user=root --host=127.0.0.1 --protocol=tcpMySQL 将提示您输入密码...但除非您设置[电子邮件保护](TCP)用户和密码,那么您将无法使用该方法登录。

请记住,现在强烈建议不要设置 root TCP 用户,而是创建一个替代的“维护”用户(例如 phpMyAdmin),例如[电子邮件保护]

相关内容