如何增加 MySQL 允许的最大数据包大小?



我在使用MySQL时遇到了问题。我收到错误Lost connection to MySQL server during query.在StackOverflow上,他们说MySQL配置中的max_allowed_packet可能太低了。

我试图在/etc/mysql/my.cnf中更改它,但该文件不可编辑。sudo不能在 PA 上使用。

我正在使用Sqlalchemy来处理与MySQL服务器的交互。

我能做什么?

编辑:

我已将其传递到配置变量中:

class ProductionConfig:
SQLALCHEMY_DATABASE_URI = 'mysql://myconnection@server$db?max_allowed_packet=32M'

然后将其传递给应用程序和数据库初始化:

app.config.from_object(ProductionConfig)
db.init_app(app)  #  db = Sqlalchemy()

输出:

TypeError: 'max_allowed_packet' is an invalid keyword argument for connect()

在我增加泳池回收后,问题消失了:

与 Sqlalchemy:

class Config:
SQLALCHEMY_DATABASE_URI = 'mysql://<your-connection-string>'
SQLALCHEMY_POOL_RECYCLE = 280

这不是我的主意。PythonAnywhere的一名工作人员建议道。

如果您具有 SUPER 权限,则可以更改全局变量。但是您无法使这些更改持续存在,因此如果MySQL服务器重新启动,更改将恢复为原始值。

mysql> set global max_allowed_packet=1024*1024*32;
Query OK, 0 rows affected (0.00 sec)

我不熟悉Python Anywhere,但我猜如果你没有编辑配置文件的权限,你可能也没有超级权限。

唯一的其他选择是将自己限制为适合运行 Python Anywhere 的人员为您配置的max_allowed_packet的查询和结果。

如果您需要更多功能,那么是时候学习运行自己的服务器了。

您可以在客户端服务器端指定此标志,但服务器端是限制。您可以按照比尔·卡温的答案进行操作,也可以尝试在客户端进行更改并产生什么效果。

在客户端上,外壳:

mysql --max_allowed_packet=32M mydb -e 'SELECT * FROM table1'

在客户端上,PyMySQL 示例:

g.db = pymysql.connect(
host               = 'localhost',
port               = 3306,
user               = 'user',
password           = 'password',
database           = 'mydb',
max_allowed_packet = '32M'
)

在客户端上,SQLAlchemy,但我不确定这是否会按预期工作:

engine = create_engine("mysql+pymsql://user:pass@some_mariadb/dbname?charset=utf8mb4&max_allowed_packet=32M")

最新更新