在命令行中传输文件

时间:2013-02-15 06:14:12

标签: mysql shell centos command-line-arguments

我想将一个非常大的sql文件导入我的测试数据库服务器,该文件大约为50GB。问题是如果我mysql -uuser -p < sqlfile.sql,由于文件加载时间本身,它将花费非常宽松的时间。

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

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

之类的东西

mysql -user -p <1.sql < 2.sql < 3.sql等等,如果可能,我将能够使用xargsfor循环对目录中的所有文件执行此操作?

编辑:我分割文件的尝试受此帖How to import LARGE sql files into mysql table的约束。似乎问题与我的问题相同。好吧,测试服务器是8 GB,Xeon Quadcore,我在另一台服务器上尝试了相同的,使用20 Core 144GB,并且在11小时运行时完成了很好(共享一个有大量CPU / RAM密集型工作正在进行... )。测试服务器,该过程尚未完成。所以我猜这是RAM +文件加载开销。如果我错了,请纠正我。

1 个答案:

答案 0 :(得分: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