首页 > 解决方案 > MariaDB 连接问题(数字海洋)

问题描述

我从最新的 MariaDB 版本 10.4.14 中获得了备受讨论的 ER_NOT_SUPPORTED_AUTH_MODE,该版本安装在在 Digital Ocean droplet 上运行的 Ubuntu 20.04 上。上下文:

  1. 我可以远程(从我的开发 PC 上的 MySQL Workbench)和本地(从 SSH 运行 Ubuntu MariaDB 客户端)连接到 MariaDB 的 Ubuntu 实例。
  2. 当我的应用程序首次尝试查询数据库时,我的 Vue 应用程序(带有 Express 后端)收到 ER_NOT_SUPPORTED_AUTH_MODE 错误。
  errno: 1251,
  sqlMessage:
   'Client does not support authentication protocol requested by server; consider upgrading MariaDB client',
  sqlState: '08004',
  fatal: true }
  1. 我的应用程序(相同的代码)在我的本地开发 PC 的 MariaDB 实例上运行没有问题,版本为:10.4.13。这几个月来一直很稳定。

我升级了 MariaDB 服务器和客户端。我在网上搜索了很多关于这个问题的活动,并尝试了最常见的修复方法,即更改 MariaDB 用户以使用 mysql_native_password 身份验证: ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY PASSWORD('password')

我尝试了其他一些看起来可能相关的远景。这些都没有任何区别。我已经完成了 FLUSH PRIVILEGES,重新启动了服务器,我能想到的一切。至少尝试了 2 或 3 次以确保我做对了。尽管我多年来一直在使用 MariaDB(包括在 Linux 上),但我还不足以成为 MariaDB 的专家,无法了解其他技巧。

在我放弃 MariaDB 并退回到 MySQL(我在 Ubuntu 上使用早期版本)之前,我还能尝试什么?我需要通过 Ubuntu 部署,而不是 Windows 或 Raspbian Linux!

标签: mysqlnode.jsvue.jsmariadb

解决方案


不是答案,但评论可能太长了(我没有提前计算字符:-)

ER_NOT_SUPPORTED_AUTH_MODE是服务器错误,在以下情况下发生:

  • 客户端发送 pre 4.1 认证,服务器不再支持 3.23 协议

  • 客户端在身份验证之间从旧更改为新加扰长度

  • 服务器不知道/不支持客户端身份验证。

要找到它的确切原因,有几种方法:

  1. 可能是最简单的:使用wireshark 或tcpdump 捕获您的流量,通过wireshark 可视化并检查服务器和客户端的hello 数据包。很可能会有两个以上的 hello 数据包,因为将重新协商身份验证。

  2. 启动 MariaDB 服务器的调试会话(在 DO 上可能不可能?!)并在 sql/sql_acl.cc 中设置一些断点,该文件负责用户身份验证。

我不熟悉 vue 应用程序,但它使用的是 node.js - 你是否使用 MariaDB Nodejs 配置它?

祝你好运!


推荐阅读