如果MySQL数据库连接池在很长一段时间内没有使用,或者使用它的应用程序崩溃,它会过期吗



我正在使用MySQLConnectionPool从Python脚本连接数据库MySQL(MariaDB(。我使用上下文管理器来处理池中的连接。我想知道如果长时间不使用,或者我的程序崩溃了,这个池是否会过期。我发现MySQL数据库的连接过期了,即使你忘记或无法关闭程序中的连接,它也会被释放吗?连接池的情况如何?

from contextlib import contextmanager
import mysql.connector
from mysql.connector.errors import Error
from mysql.connector import pooling
SQL_CONN_POOL = pooling.MySQLConnectionPool(
pool_name="mysqlpool",
pool_size=1,
user=DB_USER,
password=DB_PASS,
host=DB_HOST,
database=DATABASE,
auth_plugin=DB_PLUGIN
)
@contextmanager
def mysql_connection_from_pool() -> "conn":
conn_pool = SQL_CONN_POOL  # get connection from the pool, all the rest is the same
_conn = conn_pool.get_connection()
try:
yield _conn
except (Exception, Error) as ex:
# if error happened all made changes during the connection will be rolled back:
_conn.rollback()
# this statement re-raise error to let it be handled in outer scope:
raise
else:
# if everything is fine commit all changes to save them in db:
_conn.commit()
finally:
# actually it returns connection to the pool, rather than close it
_conn.close()

@contextmanager
def mysql_curs_from_pool() -> "curs":
with mysql_connection_from_pool() as _conn:
_curs = _conn.cursor()
try:
yield _curs
finally:
_curs.close()

是的,它可以定时路由。有两种超时配置。

参见wait_timeout和interactive_timeout

相关内容

最新更新