通过命令行将大型sql文件导入到MySql

我试图通过命令行在Ubuntu中导入一个大约300MB的SQL文件到MySql。 我用了

source /var/www/myfile.sql; 

现在它显示了一个看似无限的行:

 Query OK, 1 row affected (0.03 sec) 

不过现在运行了一段时间。 我还没有导入一个这么大的文件,所以我只想知道这是否正常,如果进程停滞或有一些错误,这将显示在命令行或将无限期地继续下去?

谢谢

您可以使用像这样的标准input来导入.sql文件:

mysql -u <user> -p<password> <dbname> < file.sql

注意: <-p><password>之间不应有空格

参考: http : //dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

注意build议的编辑:这个答案稍微改变了build议编辑使用内联密码参数。 我可以推荐它用于脚本,但是您应该知道,当您直接在参数( -p<password> )中写入密码时,它可能会被任何可以读取历史logging文件的人员发现您的密码。 而-p要求您通过标准input来input密码。

关于导入大文件花费时间最重要的是需要更多的时间是因为默认设置的MySQL是“autocommit = true”,您必须先设置closures之前导入您的文件,然后检查如何导入工程像一个gem…

首先打开MySQL:

mysql -u root -p

那么,你只需要做以下事情:

mysql>use your_db

mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

+1到@MartinNuc,你可以在批处理模式下运行mysql客户端,然后你不会看到“OK”行的长长的stream。

导入给定SQL文件所花费的时间量取决于很多事情。 不仅是文件的大小,还有其中的语句types,你的服务器服务器有多强大,同时还有多less其他的东西在运行。

@MartinNuc说他可以在4-5分钟内加载4GB的SQL,但是我已经运行了0.5GB的SQL文件,并且在一台较小的服务器上花了45分钟。

我们无法猜测在服务器上运行SQL脚本需要多长时间。


重新评论,

@MartinNuc是正确的,你可以select使mysql客户端打印每一个语句。 或者你可以打开第二个会话并运行mysql> SHOW PROCESSLIST查看正在运行的内容。 但是,您可能对“已完成百分比”数字或对完成剩余陈述需要多长时间的估计感兴趣。

对不起,没有这个function。 mysql客户端不知道运行后面的语句需要多长时间,甚至有多less。 所以它不能给出一个有意义的估计,需要多less时间才能完成。

我用于大型SQL恢复的解决scheme是一个mysqldumpsplitter脚本。 我将我的sql.gz分割成单独的表。 然后加载类似mysql工作台的东西,并将其作为还原到所需的模式进行处理。

这里是脚本https://github.com/kedarvj/mysqldumpsplitter

这适用于较大的SQL恢复,我在一个网站上的平均工作是一个2.5GB的sql.gz文件,20GB未压缩,并且~100Gb一旦完全恢复