docker方式:otter:4.2.18 要同步的MySQL源和目标数据库:8.0版本
Pipline日志: Caused by: java.io.IOException: Error When doing Client Authentication:ErrorPacket [errorNumber=1251, fieldCount=-1, message=Client does not support authentication protocol requested by server; consider upgrading MySQL client, sqlState=08004, sqlStateMarker=#]
请问咋回事?不支持8.0?
原提问者Github 用户 ahJames
这个错误通常是由于 MySQL 8.0 引入了新的身份验证插件 (caching_sha2_password),而旧版本的客户端默认使用的是旧的身份验证插件 (mysql_native_password)。如果 Otter 使用的 MySQL 客户端版本比 MySQL 8.0 版本低,则 Otter 客户端将无法连接到 MySQL 8.0 数据库,导致该错误。
解决此问题的方法如下:
升级 MySQL 客户端 可以尝试升级 Otter 使用的 MySQL 客户端版本。建议升级到最新的 MySQL 版本(8.0 或更新),以确保兼容性。如果 Otter 是在 Docker 中运行,则需要确保宿主机上的 MySQL 客户端版本与目标数据库兼容。
更改 MySQL 8.0 身份验证插件 可以更改 MySQL 8.0 的身份验证插件,使其兼容旧版本的客户端。可以如下操作:
登录到 MySQL 8.0 数据库
运行以下命令更改用户的身份验证插件为旧版插件:
ALTER USER 'your_username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; 请将 "your_username" 和 "your_password" 替换为您要更改的实际用户名和密码。
如果需要更改所有用户的身份验证插件,请使用以下命令: ALTER USER '*'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; 请将 "your_password" 替换为您要更改的实际密码。
最后,使用以下命令刷新权限: FLUSH PRIVILEGES; 请注意,这种方法会将 MySQL 数据库的安全性降低,因为它使用旧的身份验证插件。因此,在执行此操作之前,应该谨慎评估安全风险。
希望这可以帮助您解决问题。
这个问题是由于 MySQL 8.0 引入了新的身份验证插件(caching_sha2_password),而旧版本的 MySQL 客户端不支持这个插件导致的。所以建议您将 MySQL 客户端升级到 8.0 或以上版本,或者更改 MySQL 8.0 的身份验证插件为旧版插件(mysql_native_password)。
如果您使用的是 Docker 容器方式部署 MySQL,可以在启动容器时添加 --default-authentication-plugin=mysql_native_password
参数来更改身份验证插件,例如:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0 --default-authentication-plugin=mysql_native_password
另外,您也可以在 Otter 的配置文件中配置 MySQL 客户端的相关参数,例如:
otter.node.mysql.url=jdbc:mysql://hostname:port/dbname?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&useAffectedRows=true&allowPublicKeyRetrieval=true&useSSL=false&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useServerPrepStmts=true&cachePrepStmts=true&prepStmtCacheSize=250&prepStmtCacheSqlLimit=2048&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&connectTimeout=10000&socketTimeout=300000&useCursorFetch=true&defaultFetchSize=1000&useCompression=true&noAccessToProcedureBodies=true
otter.node.mysql.username=root
otter.node.mysql.password=123456
otter.node.mysql.driver=com.mysql.jdbc.Driver
otter.node.mysql.maxPoolSize=10
otter.node.mysql.initialPoolSize=1
otter.node.mysql.minPoolSize=1
otter.node.mysql.acquireIncrement=1
otter.node.mysql.maxIdleTime=600
otter.node.mysql.checkoutTimeout=30000
otter.node.mysql.idleConnectionTestPeriod=60
otter.node.mysql.preferredTestQuery=select 1
otter.node.mysql.validationQuery=select 1
otter.node.mysql.testConnectionOnCheckin=true
otter.node.mysql.testConnectionOnCheckout=true
otter.node.mysql.testConnectionInterval=60
otter.node.mysql.jdbcProperties=autoReconnect=true;maxReconnects=10;connectTimeout=10000;socketTimeout=300000;useCursorFetch=true;defaultFetchSize=1000;useCompression=true;noAccessToProcedureBodies=true
otter.node.mysql.allowPublicKeyRetrieval=true
otter.node.mysql.serverTimezone=Asia/Shanghai
otter.node.mysql.useAffectedRows=true
otter.node.mysql.useJDBCCompliantTimezoneShift=true
otter.node.mysql.useLegacyDatetimeCode=false
otter.node.mysql.useServerPrepStmts=true
otter.node.mysql.cachePrepStmts=true
otter.node.mysql.prepStmtCacheSize=250
otter.node.mysql.prepStmtCacheSqlLimit=2048
需要注意的是,上述配置中的 otter.node.mysql.url
参数中的 serverTimezone
参数需要根据您的 MySQL 服务器所在的时区进行设置。
问题可能是由于MySQL客户端版本不兼容导致的。MySQL 8.0使用了新的身份验证插件caching_sha2_password,而旧版本的MySQL客户端不支持该插件。为了解决该问题,您可以尝试以下方法:
升级MySQL客户端:请升级您的MySQL客户端到最新版本,以支持新的身份验证插件。您可以从MySQL官方网站下载最新版本的MySQL客户端。
更改MySQL服务器的身份验证插件:如果您无法升级MySQL客户端,您可以尝试更改MySQL服务器的身份验证插件,使其与旧版本的MySQL客户端兼容。您可以将MySQL服务器的身份验证插件更改为mysql_native_password,使其与旧版本的MySQL客户端兼容。
使用兼容的JDBC驱动程序:如果您正在使用JDBC连接到MySQL服务器,则可以尝试使用兼容的JDBC驱动程序。MySQL官方提供了JDBC驱动程序,该驱动程序支持新的身份验证插件。请确保您使用的JDBC驱动程序与您的MySQL服务器版本兼容。
可能是因为8.0使用了新的身份验证插件(caching_sha2_password),而旧版本的MySQL客户端不支持该插件。可以尝试使用支持新插件的MySQL客户端,或者将目标数据库的身份验证方式更改为旧版本支持的方式(如mysql_native_password)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。