Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在使用python加载数据从大型csv传输数据时崩溃_Python_Mysql_Csv - Fatal编程技术网

MySQL在使用python加载数据从大型csv传输数据时崩溃

MySQL在使用python加载数据从大型csv传输数据时崩溃,python,mysql,csv,Python,Mysql,Csv,我有一个3000万行1.6GB的大型csv文件,我正在使用pymysql将数据从csv加载到mysql表。 我删除了表模式中的所有约束,以加快加载速度,并将超时值设置为大值 def setTimeOutLimit(connection): try: with connection.cursor() as cursor: query = "SET GLOBAL innodb_lock_wait_timeout = 28800" cursor.execute(

我有一个3000万行1.6GB的大型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,“在查询[WinError 10054]期间与MySQL服务器的连接丢失。远程主机强制关闭了现有连接”

当我检查服务时,MYSQL80自动崩溃并停止。我还在my.ini文件中将max_allowed_packet_size设置为1GB,所有超时都手动设置为8小时。可能是什么问题

原始表架构是:

query = ("CREATE TABLE IF NOT EXISTS " + table + " ("
                  " TimeStamp  DECIMAL(15, 3), " + 
                  " Value      DECIMAL(30, 11), " +
                  " Quality    INT, " +
                  " TagName    varchar(30) )"
                  )

我最终解决了这个问题,将my.ini文件中的innodb_buffer_pool_大小设置为2GB,之前只有4M

TimeStamp DECIMAL15,3 TimeStamp是。但它不会导致此问题,因为它适用于较小的CSV。您加载的加载数据输入文件的大小似乎为1.6GB。max_allowed_数据包的大小也应被视为输入限制器。检查您的版本的参考手册,以确定您的版本允许的最大允许值。通常是1G。