我用程序生成一个sql文件,文件里面是一条Insert语句对应几千万条记录,文件大小1G多,通过命令行source命令导入到数据库时报错ERROR 5 (HY000): Out of memory。
    网上说要修改my.ini文件里面的max_allowed_packet,我改为200M,tmp_table_size改为1000M。然后从1G多文件中拷贝出124M文件,通过source命令导入还是报错:ERROR 5 (HY000): Out of memory (Needed 2490020 bytes)  (导入一个124M文件,竟然要2.5G内存?不解啊...)
    如果sql文件为几十M则可顺利导入。请大侠们为我支招啊,如何才能顺利一次性导入1G多sql文件?或者其他省事的方法,不胜感激~

解决方案 »

  1.   

    试试直接在shell命令下导入root>mysql -uroot -ptest < xxx.sql
      

  2.   

    (Needed 2490020 bytes  需要2M多的内存。建议把你的sql文件分成更小的多份小文件。再分批导入进去。
      

  3.   

    建议
    导出数据时
    先只导出表结构 
    --no-data,-d然后导出数据
    这样导入时可以分批导入
    可以试一下
     --compress,-C压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)。
    这个选项
      

  4.   

    mysql>mysql -uroot -ppassword <aaa.sql;
      

  5.   

    为什么不用output file语句导出呢?
      

  6.   

    用管理员的身份mysql>mysql -uroot -p 数据库密码 导入的数据库 <xxx.sql(要导入的.sql数据文件);
      

  7.   

    今天  刚好看到的一段话如果使用mysql客户端程序发出了查询,并收到下述错误之一,则表示mysql没有足够内存来保存全部查询结果:mysql: Out of memory at line 42, 'malloc.c'
    mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)
    错误2008: MySQL client ran out of memory
    要想更正该问题,首先应检查查询是否正确。返回这么多行是否合理?如果不合理,更正查询并再次尝试。否则,应使用“--quick”选项调用mysql。这样,将使用mysql_use_result() C API函数来检索结果集,这类函数能够降低客户端上的负载(但会加重服务器上的负载)。
      

  8.   

    mysql>source c:\database.sql
      

  9.   

    我记得这个是和操作系统有关,在windows系统下导入会这样,在linux不会,如在windows下导入需要在my.ini里增加一个参数