MySQL大表导入

MySQL大表导入,mysql,Mysql,我有一个1GB的sql文本文件正在导入MySQL。 我使用了“大文本文件查看器”,可以通过std mysql表导出看到它——从drop table开始,然后创建新表,然后插入。注意:我还有一个表格的csv 我使用以下方法导入它: php.ini-上传最大文件大小、内存限制和发布最大大小(增加这些文件的大小,但它仍然说它太大了-使这些数字非常大-默认数字后10个零) C:\wamp\bin\mysql\mysql5.1.53\bin>mysqlimport-h localhost-u root-p

我有一个1GB的sql文本文件正在导入MySQL。 我使用了“大文本文件查看器”,可以通过std mysql表导出看到它——从drop table开始,然后创建新表,然后插入。注意:我还有一个表格的csv

我使用以下方法导入它:

  • php.ini-上传最大文件大小、内存限制和发布最大大小(增加这些文件的大小,但它仍然说它太大了-使这些数字非常大-默认数字后10个零)

  • C:\wamp\bin\mysql\mysql5.1.53\bin>mysqlimport-h localhost-u root-p--fields-t 终止于='\t'--行终止于='\n'--本地测试c:\temp\filename.csv

  • 源c:\temp\filename.sql

  • 我可以看到“任务管理器”中的第二个方法似乎是在将整个1GB文件插入MySQL之前将其移动到内存中。我可以看到每个进程的进程,它慢慢地增长到超过1GB,并因错误而失败

    问题:是否有更好、最快的方法导入表?有没有一种方法不需要将整个文件移动到内存中?我第一次使用如此大的sql表


    thx

    如此巨大的出口问题的一部分(大概)是由于它的冗余。可能有数千个“INSERT”命令,当一次加载所有命令时,会占用大量内存

    如果您拥有与CSV完全相同的数据,我要做的是创建一个小PHP脚本,逐行遍历CSV文件,动态创建一个INSERT sql查询,然后执行它。这将使内存占用非常低,因为在每次插入后,您可以不断替换临时变量(对应于字段)的值

    我已链接到我将尝试使用的函数。它叫fgetcsv。该链接还有一些我认为可能对您有用的示例脚本,这些脚本是由其他用户创建的

    祝你好运

    如果可以,尽量不要使用
    --local
    选项

    使用本地加载数据时,将在服务器的临时目录中创建文件的副本。这不是由tmpdir或slave_load_tmpdir的值确定的目录,而是操作系统的临时目录,在MySQL服务器中不可配置。(在Linux系统上,系统临时目录通常为/tmp,在WINDOWS系统上为C:\WINDOWS\TEMP。)此目录中的副本空间不足可能导致LOAD DATA LOCAL语句失败。

    由于
    mysqlimport
    实用程序基本上是LOAD DATA INFILE语句的包装器,因此这也适用于您