问题描述
OS-在Pi上 说明:Raspbian GNU / Linux 10(破坏者) 发布:10
MysqL(mariaDB)版本: MysqL Ver 15.1 distrib 10.3.22-MariaDB,用于使用readline 5.2的debian-linux-gnueabihf(armv8l)
通过此问题的其他在线答案,我尝试了以下步骤:
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
然后继续进行以下步骤:
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”命令当然是用于确认守护程序已关闭并且已启动正确的守护程序/状态)
MysqL -u root -p
Enter password:
我输入刚才设置的密码并得到:
我已经看到一些有关TCP vs套接字的评论,但是我不确定该如何解决这个问题。我在做什么错了?
解决方法
首先,不要直接修改mysql.user表,而不要使用CREATE
,ALTER
或DROP USER
命令。在最新版本的MariaDB中,mysql.user
是无法修改的视图。
在Debian上,套接字连接(localhost)的默认身份验证方法是通过unix_socket身份验证插件处理的:该插件允许它检索连接到套接字的进程的uid。然后,它可以获取与该uid关联的用户名。一旦拥有了用户名,它将把连接用户认证为具有相同用户名的MariaDB帐户。
因此,简单的sudo mysql -uroot
应该可以以root用户身份进行连接。