1

好的,伙计们,我已经下载了 wikipedia xml 转储及其高达 12 GB 的数据:\ 对于一个表,我想将它导入到我的本地主机上的 mysql 数据库中 - 但是它是一个 12GB 的巨大文件,显然 navicats 正在度过它的甜蜜时光导入它或者它更有可能被绞死:(。

有没有办法包括这个转储或至少部分你知道一点点。


让我更正一下它的 21 GB 数据 - 并不是说​​它有帮助:\ - 有没有人知道将这样的巨大文件导入 MySQL 数据库。

4

3 回答 3

2

改用命令行,navicat 不适合导入大文件,而且可能比使用 CLI 花费 20 倍的时间。

于 2009-05-14T13:13:40.083 回答
1

看看Sax 解析器,它允许您逐段读取语料库,而不是将整个 12gb 读取到内存中。不过,我不太确定您将如何将其与 mysql 接口。

于 2009-05-14T10:45:43.420 回答
0

这是一个很老的问题,FWIW .. 用新的答案刷新。我也遇到过同样的问题,一个庞大的 sql 文件运行几个小时可能会有风险,遇到任何问题基本上意味着你要重新开始。我做了什么来降低风险并通过 CLI 获得一些性能。

  1. 将庞大的 SQL 文件拆分为更小更易于管理的块,例如将“enwiki-20140811-page.sql”拆分为大约 75MB 大小的文件。

    split -l 75 enwiki-20140811-page.sql split_
    

    将产生相当数量的文件名中以“split_”为前缀的文件。

  2. 遍历这个文件列表并一次导入一个......一个简单的shell脚本。

    for f in $FILES
    do
      echo "Processing $f file..."
      mysql -h $HOST -u $USER -p$PSWD $DB < $f
    done
    

如果由于某种原因而中断,您可以轻松地从中断的地方继续。

通过行数拆分 SQL 文件可防止破坏任何大型 INSERT 语句。但是,如果您将行数降得太低,您可以在 SQL 的开头拆分 DROP 和 CREATE 语句。这很容易通过打开前几个拆分文件并解决来解决。

于 2014-08-28T00:53:08.997 回答