java - MySQL JDBC 驱动程序无法将数据插入到只读副本上的临时表中
问题描述
我正在连接到 MySQL 的只读副本实例(实际上是 Google Cloud SQL)。JDBC 驱动程序似乎能够创建临时表,但不能向其中插入数据。但是,使用另一个客户端(在我的情况下是 MySQL 工作台),我能够创建数据并将其插入到临时表中。看起来像 JDBC 驱动程序中的错误?有哪些选项可以让它工作?
这是我得到的异常(由于公司政策,我无法发布整个堆栈跟踪):
Caused by: java.sql.SQLException: The MySQL server is running with the --read-only option so it cannot execute this statement
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2006)
版本详情:
MySQL 版本 = 5.7.25-google-log
JDBC 驱动程序 = mysql-connector-java-5.1.21.jar
注意:在主实例(而不是只读副本)上运行将是我的最后选择。我几乎知道它会起作用。
解决方案
不,驱动程序版本 99% 不是问题原因(我猜)。因为我在 MySQL 5.0、5.1、5.6 和 5.7 上使用匹配的 JDBC 驱动程序版本成功写入了临时表。
错误消息告诉我,服务器本身由于其“只读”配置而拒绝尝试。
有一个相关的错误报告:https ://bugs.mysql.com/bug.php?id=64992
您确定您的表确实是临时表(不是常规表)并且您在同一个会话/连接中使用它吗?因为否则它不会故意工作。
推荐阅读
- reactjs - 创建从父组件获取的嵌套组件作为道具
- css - 无法删除打印特定 div 时添加的额外空白页
- reactjs - 如何在 src 包之外的 react js 应用程序中使用 redux 存储、reducers 和操作?
- node.js - 节点配置和 PM2 的 NODE_APP_INSTANCE 错误
- android - 从音符android生成声音
- python - Difference of function of "reshape" in numpy and Keras
- node.js - re, res从哪里来的快递
- c - 何时在 char 指针上使用 void 指针?
- validation - 如何测试排名系统?
- javascript - 如何在nodeJs中将id(字符串)存储到objectId