我想将一个非常大的sql文件导入我的测试数据库服务器,该文件大约为50GB。问题是如果我mysql -uuser -p < sqlfile.sql
,由于文件加载时间本身,它将花费非常宽松的时间。
所以我想使用split -bytes=100M
将文件拆分为100MB左右的非常小的块,但问题是拆分不会与SQL语句对齐(跨越文件边界的插入语句损坏)。
现在我的问题是,有没有办法在命令行中流式传输多个文件?
之类的东西 mysql -user -p <1.sql < 2.sql < 3.sql
等等,如果可能,我将能够使用xargs
和for
循环对目录中的所有文件执行此操作?
编辑:我分割文件的尝试受此帖How to import LARGE sql files into mysql table的约束。似乎问题与我的问题相同。好吧,测试服务器是8 GB,Xeon Quadcore,我在另一台服务器上尝试了相同的,使用20 Core 144GB,并且在11小时运行时完成了很好(共享一个有大量CPU / RAM密集型工作正在进行... )。测试服务器,该过程尚未完成。所以我猜这是RAM +文件加载开销。如果我错了,请纠正我。
答案 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