1、错误起因
mysql模块(项目地址为GitHub - mysqljs/mysql: A pure node.js JavaScript Client implementing the MySQL protocol.)是一个开源的、JavaScript编写的MySQL驱动,可以在Node.js应用中来操作MySQL。但在使用过程中,出现了“ER_NOT_SUPPORTED_AUTH_MODE”问题。
2、错误原因
导致这个错误的原因是,目前,最新的mysql模块并未完全支持MySQL 8的“caching_sha2_password”加密方式,而“caching_sha2_password”在MySQL 8中是默认的加密方式。因此,下面的方式命令是默认已经使用了“caching_sha2_password”加密方式,该账号、密码无法在mysql模块中使用。
3、解决问题
这意味着你的MySQL客户端不支持MySQL服务器所使用的身份验证协议。这个问题通常发生在MySQL 8.0或更高版本中,因为这些版本默认使用caching_sha2_password作为身份验证插件,而一些旧的客户端库可能只支持mysql_native_password。
为了解决这个问题,你可以采取以下步骤:
1. 更改MySQL用户的身份验证插件
如果你不能或不想升级客户端库,你可以更改MySQL用户的身份验证插件为mysql_native_password。你可以通过运行以下SQL命令来实现:
ALTER USER 'yourusername'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
请将yourusername和yourpassword替换为你的MySQL用户名和密码。如果你的应用从任何主机连接,你可能需要将localhost替换为%。
注意事项
在生产环境中更改用户的身份验证插件或服务器配置之前,请确保你了解这些更改可能带来的安全影响。
caching_sha2_password比mysql_native_password提供了更强的安全性,因此仅在你确实无法升级客户端库,并且理解相关风险的情况下,才考虑更改身份验证插件。
综上所述,首先尝试升级你的mysql客户端库,这通常是解决这个问题的最简单和最直接的方法。如果升级不可行或不起作用,再考虑更改MySQL用户的身份验证插件或服务器配置。