Mysql MariaDB-无法以root用户身份登录

Mysql MariaDB-无法以root用户身份登录,mysql,mariadb,Mysql,Mariadb,我正试图在Ubuntu(16.04.02)上安装MariaDB(10.0.29)。在我安装并启动进程(sudo-service-mysql-start)后,我无法以root身份登录,即使我最初将密码设置为空 Iemysql-u root将拒绝我访问。我通过sudo-mysql登录并检查了用户表,即从mysql中选择用户、密码、身份验证字符串。用户和预期的: +---------+----------+-----------------------+ | User | password |

我正试图在Ubuntu(16.04.02)上安装MariaDB(10.0.29)。在我安装并启动进程(
sudo-service-mysql-start
)后,我无法以
root
身份登录,即使我最初将密码设置为空

Ie
mysql-u root将拒绝我访问。我通过
sudo-mysql
登录并检查了用户表,即
从mysql中选择用户、密码、身份验证字符串。用户
和预期的:

+---------+----------+-----------------------+ 
| User    | password | authentication_string |
+---------+----------+-----------------------+
| root    |          |                       |
+---------+----------+-----------------------+
我还创建了一个新用户,即创建由“”标识的用户“测试”@“本地主机”mysql-u测试时(空密码),它会按预期工作并让我登录

用户表如下所示:

+---------+----------+-----------------------+
| User    | password | authentication_string |
+---------+----------+-----------------------+
| root    |          |                       |
| test    |          |                       |
+---------+----------+-----------------------+

那么,有人能告诉我为什么我不能用空密码以
root
身份登录,但我可以以
test
身份登录吗?

与本机MariaDB软件包(MariaDB本身提供的软件包)不同,Ubuntu生成的软件包默认具有本地root的身份验证。检查、运行

SELECT user, host, plugin FROM mysql.user;
如果在
plugin
列中看到
unix\u socket
,这就是原因

要返回到通常的密码身份验证,请运行

UPDATE mysql.user SET plugin = '' WHERE plugin = 'unix_socket';
FLUSH PRIVILEGES;

(选择适合您的目的的
WHERE
子句,上面的一个只是一个例子)

我为此挣扎了一段时间。默认情况下,我的Ubuntu附带MariaDB(10.0.31)。在重新安装了几次并根据各种建议更改插件之后,我仍然无法正确登录mysql

最后,我安装了回购协议中最新的MariaDB(10.2.12):


我可以立即正确登录。

您遇到的问题是由于MariaDB 10.4的身份验证系统发生了更改:

由于上述更改,为所有人开放的全能根帐户终于消失了。(…)因为根帐户是自动安全创建的。它们被创建为:CREATE USERroot@localhost使用“无效”通过unix_套接字或mysql_本机密码识别

如果您确实想以
根用户身份访问数据库,则应通过cli
mariadb-p
登录并运行:

ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("your-password-here");
资料来源:

关于下面的另一个解决方案:它们不起作用,因为MariaDB不允许您更新
插件
列:
错误1348(HY000):列“插件”不可更新
~


更新2020:尽管我的上述解决方案有效,但它将默认的root
unix\u套接字
身份验证替换为密码。我注意到这会中断一些任务,例如mariadb升级/您自己的维护脚本,这些脚本在以root用户身份运行时无需额外密码即可连接到DB

我的建议是添加一个新的根登录名,如下所示:

CREATE USER `root`@`%` IDENTIFIED WITH mysql_native_password using PASSWORD('your-password-here');
GRANT ALL PRIVILEGES ON *.* TO `root`@`%` WITH GRANT OPTION;
FLUSH PRIVILEGES;

这将有效地仍然允许root登录的默认行为,并使用密码添加对数据库的外部访问

空密码,没有密码可能会被区别对待。我有类似的经验。首先,在安装时,我并没有要求设置root密码。我试图重置根密码,但仍然无法访问。重新安装后,情况也一样。还有Ubuntu 16.04 64位。安装mysql Afterwards您可以按照本文所述重置您的根密码您可以使用
mysql-uroot-p
登录,当终端询问密码时,只需按enter键。这很有帮助。我知道ubuntu没有使用“root”和密码,而是在以root身份登录时强制mariadb使用自己的身份验证。这也使mariadb Mac OS root登录看起来mariadb 10.4更改了行为以匹配Debian/ubuntu: