Драйвер 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 driver = mysql-connector-java-5.1.21.jar

Примечание. Моим последним вариантом будет запуск на главном экземпляре (вместо реплики для чтения). Я почти уверен, что это сработает.

2 ответа

Решение

Пробовал с последней версией драйвера JDBC (v5.1.48), и это сработало! Итак, в версии драйвера JDBC, которую я использовал ранее (v5.1.21), была ошибка.

Нет, версия драйвера на 99% не является причиной проблемы (я полагаю). Потому что я успешно записал во временные таблицы MySQL 5.0, 5.1, 5.6 и 5.7 с соответствующей версией драйвера JDBC.

Сообщение об ошибке сообщает мне, что сам сервер отклоняет попытку из-за своей конфигурации "только для чтения".

Есть связанный отчет об ошибке: https://bugs.mysql.com/bug.php?id=64992

Вы уверены, что ваша таблица действительно временная (а не обычная) и что вы используете ее в том же сеансе / соединении? Потому что иначе это не работает специально.

Другие вопросы по тегам