我刚刚安装了 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=tcp
MySQL 将提示您输入密码...但除非您设置[电子邮件保护](TCP)用户和密码,那么您将无法使用该方法登录。
请记住,现在强烈建议不要设置 root TCP 用户,而是创建一个替代的“维护”用户(例如 phpMyAdmin),例如[电子邮件保护]。