开发者社区> 问答> 正文

客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端

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

展开
收起
云上静思 2023-06-14 23:15:05 329 0
5 条回答
写回答
取消 提交回答
  • pull的时候没指定版本4.2.18,指定后的otter可以了。

    原回答者 Github用户 ahJames

    2023-06-16 15:19:04
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    这个错误通常是由于 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 数据库的安全性降低,因为它使用旧的身份验证插件。因此,在执行此操作之前,应该谨慎评估安全风险。

    希望这可以帮助您解决问题。

    2023-06-15 17:36:19
    赞同 展开评论 打赏
  • 这个问题是由于 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 服务器所在的时区进行设置。

    2023-06-15 08:40:33
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    问题可能是由于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服务器版本兼容。

    2023-06-15 08:06:18
    赞同 展开评论 打赏
  • 可能是因为8.0使用了新的身份验证插件(caching_sha2_password),而旧版本的MySQL客户端不支持该插件。可以尝试使用支持新插件的MySQL客户端,或者将目标数据库的身份验证方式更改为旧版本支持的方式(如mysql_native_password)。

    2023-06-15 08:05:29
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像