Я хочу изменить свою программу на python с обычного соединения на пул соединений, чтобы соединение с базой данных не потерялось, если в течение нескольких часов не было отправлено ни одного запроса, а также чтобы база данных не была перегружена кучей запросовсразу при пиковой нагрузке.
Я использую Python 3.7.4, mysql-connector-python 8.0.17 и MariaDB 10.4.7.Он работает нормально, когда я использую обычное соединение, но MariaDB, очевидно, не поддерживает настройку pool_reset_session
mysql.connector.pooling.MySQLConnectionPool
. В начале моего кода он пытается создать базу данных, если нееще существует, и это вызывает ошибки, которые я получаю.
import mysql.connector as mariadb
from mysql.connector import errorcode
from mysql.connector import pooling
cnx = mariadb.pooling.MySQLConnectionPool(user='root', password='password', host='localhost',
pool_name='connectionpool', pool_size=10, pool_reset_session=True)
try:
db = cnx.get_connection()
cursor = db.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS tests")
print("Created database")
except mariadb.Error as err:
print(f"Failed creating database: {err}")
finally:
print("Finally (create)")
db.close()
Я ожидал, что этот фрагмент просто создаст базу данных tests
, но вместо этого я получил следующие две ошибки:
mysql.connector.errors.NotSupportedError: MySQL version 5.7.2 and earlier does not support COM_RESET_CONNECTION.
, а также
mysql.connector.errors.OperationalError: 1047 (08S01): Unknown command
Из журналов трассировки похоже, что это вызвано попыткой выполнить db.close()
в строке 17.
Полный вывод с трассировкой: https://pastebin.com/H3SAvA9N
Я спрашиваю, что я могу сделать, чтобы это исправить, и если вообще возможно использовать этот вид пула соединений с MariaDB 10.4.7 (я запуталсяпотому что он говорит, что MySQL <= 5.7.2 не поддерживает этот сброс соединений после использования, хотя я использую MariaDB 10.4.7) </p>
Я также обнаружил, что MariaDB Connector / J предоставляет такую возможность,называется useResetConnection
но я не хочу изучать Java толькодля этой функции.