mysqli::real_connect():Unexpectedserverresponsewhiledoingcaching_sha2auth:109orMessage:mysqli::real_connect():(HY000/1045):Accessdeniedforuser'root'@'114.254.211.9'(使用密码:YES)。前提条件:确保用户和密码支持远程连接,并且修改密码加密规则为密码验证插件mysql_native_passwordMysqli::real_connect():Unexpectedserverresponsewhiledoingcaching_sha2auth:109Source1:mysql_native_password本地能连上,线上连不上分析:经确认,版本一致,判断mysql的配置问题解决:[mysqld]default_authentication_plugin=mysql_native_password重启数据库结果:成功报错mysqli::real_connect():Unexpectedserverresponsewhiledoingcaching_sha2auth:109来源2:mysql_native_password可以在线连接,但是从php7.3.x升级到php7.4.x后本地无法连接php7.4.x后mysqli扩展连接默认使用caching_sha2_password密码认证插件。所以php7.4以后,当mysql配置中默认的认证插件不是mysql_native_password时,mysqli扩展会使用caching_sha2_password密码认证插件连接,所以报错。解决方法:1.重新安装php环境到7.4.0以下版本[不推荐]2.根据上面源码解决:[mysqld]default_authentication_plugin=mysql_native_password重启数据库报错Message:mysqli::real_connect():(HY000/1045):Accessdeniedforuser'root'@'114.254.211.9'(usingpassword:YES)来源:在php7.4.x环境下,刚创建数据库时默认的密码验证插件是caching_sha2_password使用docker,可以连接;之后,同一个密码验证插件是caching_sha2_password,用navicate修改密码后无法连接。分析-1:php7.4.x的mysqli扩展支持新的caching_sha2_password,判断navicat使用的密码验证插件caching_sha2_password的版本问题解决:在最新的mysql客户端上使用密码验证插件caching_sha2_password修改密码ALTERUSER'root'@'%'IDENTIFIEDBY'ffc'PASSWORDEXPIRENEVER;更改用户'root'@'%'通过'ffc'使用caching_sha2_password标识;冲洗特权;结果:失败,仍然报错:Message:mysqli::real_connect():(HY000/1045):Accessdeniedforuser'root'@'114.254.211.9'(usingpassword:YES)。结论:与navicate的密码验证插件无关。分析2:与操作的顺序有关。因为当前用户正在修改当前用户的密码验证方式,所以连接不再可用。修改会生效吗?解决方法:在navicat或者mysql客户端,当前用户登录连接后,通过密码验证插件caching_sha2_password修改当前用户的密码,然后使用当前用户的用户名和新密码重新连接成功,mysqli中成功的php7.4.x扩展可以正常连接。思考:如果当前用户的密码没有修改,是否需要断开重连?答:可以,而且需要用修改后的用户名和新密码重新登录mysql服务器,才能在php7.4.x的mysqli扩展中连接。在解决问题之后,对密码验证插件caching_sha2_password有一些模拟糊,结果仍然在官网上找到了对应解决缓存清除操作会影响后续客户端连接的身份验证要求。对于每个用户帐户,在以下任何操作之后用户的第一个客户端连接必须使用安全连接(使用TCP使用TLS凭据、Unix套接字文件或共享内存)或基于RSA密钥对的密码交换:创建帐户后。帐户密码更改后。帐户重命名用户后。FLUSHPRIVILEGES后。FLUSHPRIVILEGES清除整个缓存并影响使用caching_sha2_password插件的所有帐户。其他操作清除特定缓存条目并仅影响作为操作一部分的帐户。一旦用户身份验证成功,帐户被输入缓存,后续连接不需要安全连接或RSA密钥对,直到发生另一个影响帐户的缓存清除事件nt.(当缓存可以使用时,服务器使用挑战-响应机制,不使用明文密码传输,不需要安全连接。)大概意思是:缓存清除操作会影响后续客户端连接的认证要求对于每个用户帐户,在执行以下任何操作后,用户的第一个客户端连接必须使用安全连接(使用TLS凭证、Unix套接字文件或共享内存TCP的安全连接)或基于RSA的加密密钥对的加密交换:创建帐户后。更改帐户密码后。在帐户的RENAMEUSER之后。在FLUSH特权之后。FLUSHPRIVILEGES刷新整个缓存并影响使用caching_sha2_password插件的所有帐户。其他操作将清除特定的缓存条目,并且只影响属于该操作的帐户。总结:php7.4.x的mysqli扩展中默认的密码验证插件为:caching_sha2_password密码验证插件为:caching_sha2_password用户在mysqli扩展中连接前更改密码后必须重新使用客户端连接成功PHP7.4.x的。密码验证插件为:mysql_native_password用户可以在php7.4.x的mysqli扩展中连接,无需通过客户端重连
