mysql - 有没有办法在 Google Cloud SQL 中模拟 MySQL 数据库超时?
问题描述
我目前正在开发一个命中 MySQL 的 Google Cloud Run Web 应用程序,但我遇到了一个无法复制的错误。在将应用程序打开一夜后,我在早上刷新应用程序后首先遇到了这个问题。
这是错误消息:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收到的最后一个数据包是 236,899,325 毫秒前。最后一个成功发送到服务器的数据包是在 236,899,326 毫秒前。比服务器配置的“wait_timeout”值长。您应该考虑在应用程序中使用之前使连接有效性过期和/或测试,增加客户端超时的服务器配置值,或使用连接器/J 连接属性“autoReconnect=true”来避免此问题。
我知道这个问题的原因很可能是由于我的应用程序在这个线程中执行之前数据库连接超时。
我打算通过编辑 Cloud MySQL 实例来添加一个增加等待时间的标志,如该线程中所述,以希望解决该问题。
我想复制这个问题,以便评估我的预期解决方案是否会在将来起作用,但我还没有找到复制类似超时的好答案。
在 Google Cloud Platform 中,我尝试停止并重新启动与我的应用程序通信的数据库,但这并没有重新创建错误。
有没有人遇到过类似的问题?如果是这样,我将如何重新创建错误而不必等待过夜?
解决方案
您应该实施重试系统,而不是尝试复制连接问题。我会尝试在我的应用程序中实现指数退避作为执行此操作的第一种方法。
尝试复制错误的问题在于,您可能无法再次准确地获得此错误,因为它可能是由于您无法控制的因素造成的。
我希望这个信息对您有所帮助。
推荐阅读
- php - WordPress - functions.php 导致 WordPress 错误
- c - 从文本文件读取数据到结构数组
- swift - SwiftUI 中的两个 ForEach
- c# - 如果对于 lambda,编译器生成了一个方法而不是一个类,它怎么会泄漏?
- android - 'ViewModelProviders' 已弃用。升级生命周期扩展后:2.1.0 到 2.2.0-alpha05
- java - 基于 Spring Boot Liquibase 类路径的迁移文件
- angular - 导入其他模块时找不到模块@angular/core
- javascript - ES5 定义中的 OmitThisParameter 在 TypeScript 中有什么作用?
- r - R Shiny / Flex Dashboard 在运行后非常慢
- javascript - 从函数结果将整数压入数组