【发布时间】:2013-01-31 02:33:08
【问题描述】:
我想将一个非常大的 sql 文件导入我的测试数据库服务器,该文件大约 50GB。问题是如果我做mysql -uuser -p < sqlfile.sql,由于文件加载时间本身,这将需要很长时间。
所以我想使用 split -bytes=100M 将文件拆分成 100MB 左右的非常小的块,但问题是拆分不会与 SQL 语句对齐(跨越文件边界的插入语句中断)。
现在我的问题是,有没有办法在命令行中流式传输多个文件?像
mysql -user -p <1.sql < 2.sql < 3.sql 等等,如果可能的话,我可以做一些 shell scripting-fu 来使用xargs 和for 循环来对目录中的所有文件执行此操作吗?
编辑:我尝试拆分文件受此帖子 How to import LARGE sql files into mysql table 的约束。看来问题和我的一样。好吧,测试服务器是 8 GB,Xeon Quadcore,我在另一台服务器上尝试了相同的服务器,20 核 144GB,它在 11 小时运行时完成(共享一个,有很多 CPU/RAM 密集型工作正在进行...... )。测试服务器,该过程尚未完成。所以我猜这是RAM +文件加载开销。如果我错了,请纠正我。
【问题讨论】:
-
一次全部完成有什么关系?它最终需要完成,对吗?
-
50GB 文件需要 11 小时??能否请您发布您的
mycnf.conf。导入大文件也没有问题:nohup mysql -A {credentials + database if needed} < file.sql & -
尝试在配置文件中为 max_allowed_packet 和 read_buffer_size 变量设置更大的值
-
@ravnur my.cnf没有变化,只是把/var/lib/mysql改成/mysqldatadir/
-
@vadchen 根据我的理解,数据包大小是为了更冗长的陈述,对吧?将尝试增加
read_buffer_size
标签: mysql shell centos command-line-arguments