0

我想将一个非常大的 sql 文件导入我的测试数据库服务器,该文件大约 50GB。问题是如果我这样做mysql -uuser -p < sqlfile.sql,由于文件加载时间本身,这将需要很长时间。

因此,我想将文件拆分为 100MB 左右的非常小的块,split -bytes=100M但问题是拆分不会与 SQL 语句对齐(跨越文件边界的插入语句中断)。

现在我的问题是,有没有办法在命令行中流式传输多个文件?就像是

mysql -user -p <1.sql < 2.sql < 3.sql依此类推,如果可能的话,我是否可以做一些 shell scripting-fu 来使用xargsfor循环为目录中的所有文件执行此操作?

编辑:我尝试拆分文件受这篇文章的约束,How to import LARGE sql files into mysql table。看来问题和我的一样。好吧,测试服务器是 8 GB,Xeon Quadcore,我在另一台服务器上尝试了相同的服务器,20 核 144GB,它在 11 小时运行时完成(共享一个,有很多 CPU/RAM 密集型工作正在进行...... )。测试服务器,该过程尚未完成。所以我猜这是RAM +文件加载开销。如果我错了,请纠正我。

4

1 回答 1

0

问题是如果我这样做mysql -uuser -p < sqlfile.sql,由于文件加载时间本身,这将需要很长时间。

当您重定向这样的文件时,没有“加载时间”。MySQL 可以尽可能快地读取文件;没有开销。拆分文件不会给你任何加速。这是最快的。

现在我的问题是,有没有办法在命令行中流式传输多个文件?

它会比将文件分成一大块要慢,但如果你真的愿意,你可以这样做:

cat 1.sql 2.sql 3.sql | mysql -uuser -p

或者,您可以为每个文件单独运行 mysql:

for file in *.sql; do mysql -uuser -p < "$file"; done
于 2013-02-15T06:21:46.187 回答