为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL 在使用来自 python 的 LOAD DATA 从大型 csv 传输数据期间崩溃

MySQL 在使用来自 python 的 LOAD DATA 从大型 csv 传输数据期间崩溃

largeQ 2021-06-07 09:36:27
我有一个 3000 万行(1.6 gb)的大型 csv 文件,我正在使用 pymysql 将数据从 csv 加载到 mysql 表。我已经删除了表架构中的所有约束以加快加载速度,并将超时值设置为大值。def setTimeOutLimit(connection):try:    with connection.cursor() as cursor:        query = "SET GLOBAL innodb_lock_wait_timeout = 28800"        cursor.execute(query)        query2 = "SET innodb_lock_wait_timeout = 28800"        cursor.execute(query2)        query3 = "SET GLOBAL connect_timeout = 28800"        cursor.execute(query3)        query4 = "SET GLOBAL wait_timeout = 28800"        cursor.execute(query4)        query5 = "SET GLOBAL interactive_timeout = 28800"        cursor.execute(query5)        query6 = "SET GLOBAL max_allowed_packet = 1073741824"        cursor.execute(query6)except:    conn.close()    sys.exit(" Could not set timeout limit ")数据被插入到表中,但我需要将其中一个列作为主键,因此我正在创建另一个表,该表通过忽略重复值使该列成为主索引。(tableName_1 是旧表 tableName 是新表)def createNewTableFromOld(connection, tableName):try:    pprint( " Creating new table from old table  with constraints" )    with connection.cursor() as cursor:        query = (" CREATE TABLE " + tableName +                  " Like " + tableName + "_1")        cursor.execute(query)        query2 = (" ALTER TABLE " + tableName +                  " ADD PRIMARY KEY(TimeStamp) ")        cursor.execute(query2)        query3 = (" INSERT IGNORE INTO " + tableName +                   " SELECT * FROM " + tableName + "_1")        cursor.execute(query3)        query4 = ("DROP TABLE " + tableName + "_1")        cursor.execute(query4)        connection.commit()except:    conn.close()    sys.exit(" Could not create table with Primary Key ") 在此方法执行期间,在 5-6 分钟后的某个地方我收到此错误, pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10054] An existing connection was forcibly closed by the remote host)')而当我检查服务时,MYSQL80 自动崩溃并停止。我还在 my.ini 文件中将 max_allowed_packet_size 设置为 1 gb,并且所有超时都手动设置为 8 小时。可能是什么问题?
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

我最终通过将 my.ini 文件中的 innodb_buffer_pool_size 设置为 2GB(之前只有 4M)解决了这个问题。


查看完整回答
反对 回复 2021-06-09
  • 1 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信