有没有办法在 MariaDB 10.4.7 中使用来自 mysql-connector-python 的“pool_reset_connection”?

Maj*_*nya 3 mariadb python-3.x mysql-connector-python

我想将我的 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()
Run Code Online (Sandbox Code Playgroud)

我希望这个片段只会创建数据库,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)

我还发现 MariaDB Connector/J 确实提供了这样一个选项,叫做,useResetConnection但我不想仅仅为了这个功能而学习 Java。

小智 11

我在使用 mysql-connector-python for mariaDB 时遇到了同样的问题,我将 mysql-connector-python 版本降级到 8.0.12,它对我有用


小智 7

正如 @Georg Richter 指出的,MariaDB 由于历史原因返回一个类似“5.5.5-10.4.10-MariaDB-1:10.4.10+maria~bionic-log”的版本

MySQL python连接器显式检查版本(https://github.com/mysql/mysql-connector-python/blob/b034f25ec8037f5d60015bf2ed4ee278ec12fd17/lib/mysql/connector/connection.py#L1157)并且由于MariaDB服务器显示为版本5.5.5,抛出错误。

从 MariaDB 10.2.6 开始,您可以显式添加version到 cnf 文件的 [server] 部分。

配置如下:

[server]
. . . 
version=5.7.99-10.4.10-MariaDB
Run Code Online (Sandbox Code Playgroud)

连接器将看到版本 5.7.99,并进行相应的操作。