python向mysql插入大数据时的错误
·
一、问题现象
当使用python向mysql插入大数据时,可能会出现这样的错误:
(2013, 'Lost connection to MySQL server during query ([WinError 10053] 你的主机中的软件中止了一个已建立的连接。)')
或者
2006, \"MySQL server has gone away (ConnectionAbortedError(10053, '你的主机中的软件中止了一个已建立的连接。', None, 1005...
二、解决方案
这是因为传输的数据太大导致MySQL连接中断,从以下三处进行修改:
1、在python代码中增加连接超时设置和最大传输配置
def get_db_connection() -> Connection:
"""获取数据库连接"""
return pymysql.connect(
host=DB_CONFIG['host'],
port=DB_CONFIG['port'],
user=DB_CONFIG['user'],
password=DB_CONFIG['password'],
database=DB_CONFIG['database'],
charset=DB_CONFIG['charset'],
cursorclass=pymysql.cursors.DictCursor,
connect_timeout=60, # 连接超时时间 --新增这个配置
read_timeout=60, # 读取超时时间 --新增这个配置
write_timeout=60, # 写入超时时间 --新增这个配置
max_allowed_packet=128*1024*1024 # 增加最大允许的数据包大小到128MB --新增这个配置
)
2、调整mysql本身的超时时间
show global variables like "%timeout%"; --交互式连接的超时时间
set global interactive_timeout=86400;
3、调整mysql的最大允许数据包大小
修改MySQL配置文件(my.cnf或my.ini)中的max_allowed_packet参数来实现:
[mysqld]
max_allowed_packet = 128M
该文件路径一般是:/etc/my.cnf 或 /etc/mysql/my.cnf
修改完之后重启mysql服务。
如果不能重启服务,就使用SQL命令临时设置 max_allowed_packet 大小:
SHOW VARIABLES LIKE 'max_allowed_packet';
SET GLOBAL max_allowed_packet = 134217728; -- 128MB in bytes
更多推荐
所有评论(0)