Open Oniokey opened 1 month ago
关键日志:
org.springframework.dao.DataAccessResourceFailureException: Failed to obtain R2DBC Connection
Caused by: io.r2dbc.spi.R2dbcNonTransientResourceException: Connection validation failed
只能知道和数据库连接有关,但不知道你这边数据库连接的情况,所以无法判断。
可能的原因是:数据库连接的空闲超时时间和 Halo 侧配置的有冲突。如果你没有配置 spring.r2dbc.pool.max-idle-time
的话,则默认为 30 分钟。建议检查一下相关的数据库配置。
/triage needs-information
Halo 是使用的阿里云 RDS MySQL 数据库,具体配置:
"--spring.r2dbc.url=r2dbc:pool:mysql://<url>.mysql.rds.aliyuncs.com:3306/halo",
"--spring.r2dbc.username=<username>",
"--spring.r2dbc.password=<password>",
"--spring.sql.init.platform=mysql",
从 Aliyun 官方 RDS MySQL 文档看,默认系统配置如下:interaction_timeout = 7200s
和 wait_timeout = 86400s
。
不过还是建议你登录 RDS 查询一下 MySQL 服务器实际运行参数。
从 Aliyun 官方 RDS MySQL 文档看,默认系统配置如下:
interaction_timeout = 7200s
和wait_timeout = 86400s
。不过还是建议你登录 RDS 查询一下 MySQL 服务器实际运行参数。
实际运行参数是 interactive_timeout = 7200s
和 wait_timeout = 86400s
,是推荐将 spring.r2dbc.pool.max-idle-time
修改为实际运行的值吗,具体和哪一个值相同呢
暂时先不修改 Halo 的配置,建议通过 https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/view-the-parameters-of-an-apsaradb-rds-for-mysql-instance 检查一下 MySQL 服务器运行配置。
暂时先不修改 Halo 的配置,建议通过 https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/view-the-parameters-of-an-apsaradb-rds-for-mysql-instance 检查一下 MySQL 服务器运行配置。
检查 RDS 参数,实际运行参数是 interactive_timeout = 7200s
和 wait_timeout = 86400s
Hi @Oniokey , 我刚刚发现当前 Issue 此前已经有人提到过,请参考:https://github.com/halo-dev/halo/issues/4291#issuecomment-1650904899。看看能否解决你的问题呢?
/triage duplicate
Hi @Oniokey , 我刚刚发现当前 Issue 此前已经有人提到过,请参考:#4291 (comment)。看看能否解决你的问题呢?
/triage duplicate
ok,已经尝试配置,实验一段时间后再来反馈
Hi @Oniokey , 我刚刚发现当前 Issue 此前已经有人提到过,请参考:#4291 (comment)。看看能否解决你的问题呢?
/triage duplicate
这边今天访问还是会出现 500 错误,autoReconnect 参数貌似没有起作用
Hi @Oniokey , I found there is a similar issue from upstream. We have to wait it to be resolved.
我发现上游有一个类似的 Issue,我们可以关注一下。
/retitle Suddenly encountered a "Connection validation failed" error
Hi @Oniokey ,方便提供发生错误时的完整日志文件吗,我需要之前之前具体发生了什么。不出意外的话,可能会有以下警告日志:
2024-10-17T00:15:46.296+08:00 WARN 52493 --- [ctor-tcp-nio-10] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
Hi @JohnNiang ,我在日志中找到了类似的日志:
2024-10-17T09:57:25.017+08:00 WARN 7 --- [tor-tcp-epoll-4] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
2024-10-17T09:57:25.247+08:00 WARN 7 --- [tor-tcp-epoll-1] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
2024-10-17T09:57:25.490+08:00 WARN 7 --- [tor-tcp-epoll-2] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
2024-10-17T09:57:25.713+08:00 WARN 7 --- [tor-tcp-epoll-3] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
2024-10-17T09:57:25.939+08:00 WARN 7 --- [tor-tcp-epoll-4] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
2024-10-17T09:57:26.177+08:00 WARN 7 --- [tor-tcp-epoll-1] i.a.r.mysql.client.ReactorNettyClient : Connection unexpectedly closed
但是,这个警告的发生是随机的,我没有找到他和 Connection validation failed
的发生有什么关联或规律
Hi @Oniokey ,感谢反馈!
出现这个警告就说明数据库连接池中的部分连接已经断开了。目前尚不清楚为什么。RDS MySQL 的 wait_timeout 配置是 24 小时,interactive_timeout 配置是 8 小时,而 Halo 侧的连接池的 spring.r2dbc.pool.max-idle-time 配置是 30 分钟(如果你没有额外配置过),这样的配置应该是不会出现以上错误的,除非数据库重启了。
我在本地测试了两种场景都会出现以上警告:
Hi @JohnNiang ,一些反馈信息:
这是一个令人迷惑的问题……
@Oniokey
在问题解决之前,建议先安装一下 https://www.halo.run/store/apps/app-BaamQ 插件,至少可以保证未登录访客可以走页面缓存,防止出现访问不到的情况。
在问题解决之前,建议先安装一下 https://www.halo.run/store/apps/app-BaamQ 插件,至少可以保证未登录访客可以走页面缓存,防止出现访问不到的情况。
好的
系统信息
使用的哪种方式运行?
Docker Compose
发生了什么?
偶发访问首页时直接返回 500 Server Internal Error
复现步骤
相关日志输出
附加信息
虽然会偶发 500,但是刷新页面或返回首页后其余所有功能均为正常