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

如何增加MySQL允许的最大数据包大小?,mysql,sqlalchemy,flask-sqlalchemy,pythonanywhere,Mysql,Sqlalchemy,Flask Sqlalchemy,Pythonanywhere,我遇到了MySQL的问题。我在查询过程中丢失了与MySQL服务器的连接。在StackOverflow上,他们说很可能MySQL配置中的max_allowed_数据包太低 我试图在/etc/mysql/my.cnf中对其进行更改,但该文件不可编辑。sudo不能在PA上使用 我正在使用Sqlalchemy处理与MySQL服务器的交互 我能做什么 编辑: 我已将其传递到配置变量: class ProductionConfig: SQLALCHEMY_DATABASE_URI = 'mysq

我遇到了MySQL的问题。我在查询过程中丢失了与MySQL服务器的连接。在StackOverflow上,他们说很可能MySQL配置中的max_allowed_数据包太低

我试图在/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()

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

mysql> set global max_allowed_packet=1024*1024*32;
Query OK, 0 rows affected (0.00 sec)
我不熟悉Python,但我想如果您没有编辑配置文件的权限,您可能也没有超级权限

唯一的另一个选择是,您将自己限制在适合max_allowed_数据包的查询和结果中,max_allowed_数据包是由在任何地方运行Python的人员为您配置的


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

您可以在客户端和服务器端指定此标志,但服务器端是限制。您可以按照比尔·卡温的回答,或者尝试在客户端进行更改,看看效果如何

在客户端,shell:

mysql-max_allowed_packet=32M mydb-e“从表1中选择*” 在客户端上,PyMySQL示例:

g、 db=pymysql.connect 主机='localhost', 端口=3306, 用户='user', 密码='password', 数据库='mydb', 允许的最大数据包数='32M' 在客户端,SQLAlchemy,但我不确定这是否会像预期的那样起作用:

engine=创建_enginemysql+pymsql://user:pass@某些\u mariadb/dbname?字符集=utf8mb4&允许的最大\u数据包=32M
在我增加游泳池回收后,问题消失了:

使用Sqlalchemy:

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

这不是我的主意。Pythonywhere的一位工作人员提出了这个建议。

我正在使用Sqlalchemy来处理与MySQL服务器的交互。有没有办法指定max_allowed_packet参数?可以使用这个字符串+pymysql://user:pass@localhost:3306/db?max\u allowed\u packet=32M,但我不确定。不幸的是,没有,我得到了错误:TypeError:“max\u allowed\u packet”是一个无效的关键字参数,用于连接良好思维。真的吗?奇怪,我在这里工作。也许你把它传递到了连接字符串之外。我会给这个问题添加一个更新。修复你的连接字符串:有一个$where应该是一个/。很好!很高兴知道!为了清楚起见,如果其他人将来遇到这种情况,那么在查询过程中与MySQL服务器失去连接的错误可能是由许多不同的原因造成的;仅当您试图向数据库中插入非常大的内容(例如,一兆字节左右)时,才应用允许的最大数据包修复。PythonAnywhere的工作人员建议使用pool_回收修复程序的原因是,实际的根本问题是服务器端连接超时。