MYSQL在大小中插入GB的巨大的SQL文件

我试图创build一个维基百科数据库副本(大约50GB),但有最大的SQL文件的问题。

我已经使用Linux拆分实用程序将大小为GB的文件拆分为300 MB的块。 例如

split -d -l 50 ../enwiki-20070908-page page.input. 

平均300MB的文件需要3个小时在我的服务器。 我已经Ubuntu的12.04服务器操作系统和Mysql 5.5服务器。

我想要如下:

 mysql -u username -ppassword database < category.sql 

注意:这些文件由插入语句组成,这些不是CSV文件。

维基百科提供数据库转储下载,所以每个人都可以创build一个维基百科的副本。 你可以在这里find示例文件: Wikipedia Dumps

我认为导入是缓慢的,因为我的MySQL服务器的设置,但我不知道我应该改变。 我正在使用一个体面的处理器和2GB内存的机器上使用标准的Ubuntu MySQLconfiguration。 有人能帮我一个适合我的系统的configuration吗?

我试图设置innodb_buffer_pool_size为1GB,但没有徒劳。

    由于内存不足50GB(因此无法将整个数据库缓存在内存中),因此瓶颈在于磁盘子系统的写入速度。

    加速进口的技巧:

    • MyISAM不是事务性的,在单线程插入中要快得多。 尝试加载到MyISAM中,然后将该表ALTERINNODB
      • 使用ALTER TABLE .. DISABLE KEYS以避免索引逐行更新(仅限MyISAM)
      • bulk_insert_buffer_size设置bulk_insert_buffer_size您的插入大小(仅限MyISAM)
      • 设置unique_checks = 0以便不检查唯一约束。

    有关更多信息,请参阅MySQL手册中的InnoDB表的批量数据加载

    注意 :如果原始表具有外键约束,则使用MyISAM作为中间格式是一个坏主意。

    如果您的数据库不是面向事务的,那么使用MyISAM,通常比InnoDB快得多。 你研究过使用任何表分区/分片技术吗?

    将巨大的MyISAM转换成InnoDB将再次遇到性能问题,所以我不确定我会这样做。 但禁用和重新启用密钥可能会有所帮助…