mysql - MariaDB 连接问题(数字海洋)
问题描述
我从最新的 MariaDB 版本 10.4.14 中获得了备受讨论的 ER_NOT_SUPPORTED_AUTH_MODE,该版本安装在在 Digital Ocean droplet 上运行的 Ubuntu 20.04 上。上下文:
- 我可以远程(从我的开发 PC 上的 MySQL Workbench)和本地(从 SSH 运行 Ubuntu MariaDB 客户端)连接到 MariaDB 的 Ubuntu 实例。
- 当我的应用程序首次尝试查询数据库时,我的 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 }
- 我的应用程序(相同的代码)在我的本地开发 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!
解决方案
不是答案,但评论可能太长了(我没有提前计算字符:-)
ER_NOT_SUPPORTED_AUTH_MODE
是服务器错误,在以下情况下发生:
客户端发送 pre 4.1 认证,服务器不再支持 3.23 协议
客户端在身份验证之间从旧更改为新加扰长度
服务器不知道/不支持客户端身份验证。
要找到它的确切原因,有几种方法:
可能是最简单的:使用wireshark 或tcpdump 捕获您的流量,通过wireshark 可视化并检查服务器和客户端的hello 数据包。很可能会有两个以上的 hello 数据包,因为将重新协商身份验证。
启动 MariaDB 服务器的调试会话(在 DO 上可能不可能?!)并在 sql/sql_acl.cc 中设置一些断点,该文件负责用户身份验证。
我不熟悉 vue 应用程序,但它使用的是 node.js - 你是否使用 MariaDB Nodejs 配置它?
祝你好运!
推荐阅读
- java - 使用元素 BufferedReader 和 BufferedWriter 创建数组对象
- python - 阅读文档 autodoc 似乎在 Python 3.6 格式化字符串上失败
- python - 使用 Python/Selenium 获取 Youtube 视频的标题
- django - 如何将 django-sitegate 添加到模板或现有页面?
- r - 读取非常非常大的 NDJSON
- python - 谷歌云大查询 pgk_resources
- angular - 使用平均堆栈应用程序无法正确发送邮件
- python - 通过套接字发送消息时延迟多少
- c# - 如何重置隐形 Recaptcha
- ios - 如何在 App Store Connect 中添加本地化?