You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04 LEMP环境下MariaDB两种登录命令`sudo mysql`与`sudo mysql -u root -p`的差异及数据库列表显示不一致问题

Ubuntu 22.04 LEMP环境下MariaDB两种登录命令sudo mysql与sudo mysql -u root -p的差异及数据库列表显示不一致问题

嘿,这个问题我之前也碰到过,核心原因其实是两种登录方式用的认证机制不一样,导致你在MariaDB里的身份权限出现了差异,所以看到的数据库列表不同。我给你一步步拆解和解决:

先搞懂两种登录方式的区别

  • sudo mysql:这是用Unix Socket认证登录的——简单说就是操作系统的root用户直接和MariaDB做身份绑定,不需要输入密码,靠操作系统的权限直接登录MariaDB的root@localhost账号。
  • sudo mysql -u root -p:这是强制用密码认证登录,你得输入在mysql_secure_installation里设置的root密码,登录的也是root@localhost,但触发的是密码验证逻辑。

为什么数据库列表不一样?

本质是这两种登录方式对应的MariaDB用户权限可能有差异(虽然都是root,但认证方式不同,可能权限被误配置了)。SHOW DATABASES命令只会显示当前用户有权限访问的数据库,所以如果其中一个root身份的权限不全,就会看不到部分数据库。

排查和解决步骤

1. 确认两个登录身份的详细信息

分别在两种登录状态下执行这条SQL,查看用户的认证方式:

SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

你会发现:

  • sudo mysql对应的plugin字段是unix_socket
  • sudo mysql -u root -p对应的plugin是mysql_native_password或者caching_sha2_password

2. 对比两个身份的权限

同样在两种登录状态下执行:

SHOW GRANTS;

对比输出的权限列表,如果sudo mysql登录的root缺少ALL PRIVILEGES或者SHOW DATABASES权限,那就是问题所在。

3. 修复权限(关键步骤)

切换到能看到所有数据库的登录方式(也就是sudo mysql -u root -p),执行下面的SQL,给root@localhost赋予完整权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

这条命令会把所有数据库和表的权限都给root@localhost,不管用哪种认证方式登录,权限都会统一。

4. 额外排查:是否存在多个root用户

有时候可能不小心创建了root@127.0.0.1这类不同host的root用户,执行这条SQL看看所有用户:

SELECT user, host FROM mysql.user;

如果有其他root用户,也可以给他们赋予相同的完整权限,避免后续出现类似问题。

5. 极端情况:配置文件差异

如果上面的步骤都没用,那可能是sudo的环境变量导致加载了不同的MariaDB配置文件。可以在两种登录状态下执行:

SHOW VARIABLES LIKE 'datadir';

如果输出的数据目录不一样,说明连接到了不同的MariaDB实例,这时候需要检查sudo的环境变量或者MariaDB的配置文件路径(比如/etc/mysql/my.cnf、/etc/mysql/mariadb.conf.d/下的文件)。

验证修复效果

执行完权限赋予后,再分别用两种方式登录MariaDB,执行SHOW DATABASES;,应该就能看到完整的数据库列表了。

备注:内容来源于stack exchange,提问作者DanRan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 14:39:32