我在使用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")