我们在一个集群中运行 AWS RDS Aurora/MySQL 数据库,其中包含一个写入器和一个读取器实例,其中将写入器复制到读取器。
访问数据库的应用程序是使用 HikariCP 连接池的标准 java 应用程序。该池配置为"SELECT 1"
在结帐时使用测试查询。
我们注意到,有时 RDS 会将写入器故障转移到读取器。也可以通过单击 AWS 控制台中的“实例操作/故障转移”来手动复制故障转移。
连接池无法检测故障转移以及它现在连接到读取器数据库的事实,因为"SELECT 1"
测试查询仍然成功。但是,任何后续的数据库更新都会失败并显示"java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statement"
错误。
似乎"SELECT 1"
连接池可以检测到它现在已连接到阅读器,而不是测试查询,而是使用"SELECT count(1) FROM test_table WHERE 1 = 2 FOR UPDATE"
测试查询。
有没有人遇到过同样的问题?
"FOR UPDATE"
在测试查询中使用有什么缺点吗?
是否有任何替代或更好的方法来处理 AWS RDS 集群写入器/读取器故障转移?
非常感谢您的帮助
aluckdog
侃侃尔雅
相关分类