TL;DR: 要以 root 用户身份访问更新版本的 mysql/mariadb,在新安装后,您需要在 root shell 中(即sudo mysql -u root,或mysql -u root在由su - 或sudo -i 首先启动的shell 中)
刚刚在 Ubuntu 上完成了同样的升级,我遇到了同样的问题。
奇怪的是
sudo /usr/bin/mysql_secure_installation
会接受我的密码,并允许我设置它,但我无法通过mysql 客户端以root 登录
我必须使用 mariadb 启动
sudo mysqld_safe --skip-grant-tables
以 root 身份访问,而所有其他用户仍然可以正常访问。
查看mysql.user 表,我注意到root 用户的plugin 列设置为unix_socket,而所有其他用户设置为'mysql_native_password'。快速浏览此页面:https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ 解释说,Unix 套接字通过将运行客户端的进程的uid 与mysql.user 表中的用户匹配来启用登录。换句话说,要以 root 身份访问 mariadb,您必须以 root 身份登录。
果然重启了需要身份验证的mariadb守护进程,我可以用root身份登录
sudo mysql -u root -p
或
sudo su -
mysql -u root -p
做完这件事后,我想到了如何在不执行 sudo 的情况下访问,这只是运行这些 mysql 查询的问题
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
(用您想要的 mysql root 密码替换 <password>)。这为 root 用户启用了密码登录。
或者运行 mysql 查询:
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
将更改 root 帐户以使用密码登录而不更改密码,但这可能会让您安装没有 root 密码的 mysql/mariadb。
在其中任何一个之后,您都需要重新启动 mysql/mariadb:
sudo service mysql restart
瞧,我可以通过mysql -u root -p从我的个人帐户访问
请注意这样做会降低安全性 据推测,MariaDB 开发人员选择像这样进行 root 访问是有充分理由的。
想一想,我很高兴不得不sudo mysql -u root -p,所以我要切换回那个,但我想我会发布我的解决方案,因为我在其他地方找不到。