无法在 Debian 上为 MariaDB 重置 root 密码

Unable to reset root password for MariaDB on Debian

OS - 在 Pi 上 说明: Raspbian GNU/Linux 10 (克星) 发布:10

mysql (mariaDB) 版本: mysql Ver 15.1 Distrib 10.3.22-MariaDB,用于 debian-linux-gnueabihf (armv8l) 使用 readline 5.2

通过对这个问题的其他在线回答,我尝试了以下步骤ps:

sudo systemctl stop mysql.service
sudo ps aux | grep mysql
sudo mysqld_safe --skip-grant-tables --skip-networking &
sudo ps aux | grep mysql
mysql -u root
MariaDB [defaultDB]> use mysql;
MariaDB [mysql]> UPDATE user SET authentication_string = password("NEWPASSWORD") where User='root';

为了响应这一重大变化,我得到以下结果:

查询正常,1 行受影响(0.001 秒) 匹配行:1 更改:1 警告:0

那我继续后面的steps:

MariaDB [mysql]> flush privileges;
MariaDB [mysql]> quit
sudo ps aux | grep mysql
mysqladmin shutdown
sudo ps aux | grep mysql
sudo systemctl start mysql.service
sudo ps aux | grep mysql

(“sudo ps aux | grep mysql”命令当然在那里确认守护进程已经关闭并且正确的 ones/states 已经启动)

然后我尝试使用我刚刚设置的密码登录 mysql:

mysql -u root -p
Enter password:

我输入上面刚刚设置的密码得到:

ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'defaultDB'

我看到一些关于 TCP 与套接字的评论,但我不确定如何解决这个问题(如果这与问题有关)。我做错了什么?

首先,不要直接修改mysql.usertable,而是使用CREATEALTERDROP USER命令。在最新版本的 MariaDB 中,mysql.user 是一个无法修改的视图。

在 Debian 上,套接字连接 (localhost) 的默认身份验证方法是通过 unix_socket 身份验证插件处理的:该插件允许它检索连接到套接字的进程的 uid。然后它能够​​获取与该 uid 关联的用户名。获得用户名后,它会将连接用户验证为具有相同用户名的 MariaDB 帐户。​​

所以一个简单的 sudo mysql -uroot 应该可以作为 root 用户连接。