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

时间:2013-10-20 21:29:37

标签: mysql ubuntu

我正在尝试通过Ubuntu中的命令行将大约300MB的sql文件导入MySql。我用了

source /var/www/myfile.sql;

现在它正在显示看似无限的行:

Query OK, 1 row affected (0.03 sec)

然而它现在已经运行了一段时间。我以前没有导入这么大的文件所以我只是想知道这是否正常,如果进程停止或有一些错误,这会显示在命令行中还是会无限期地继续进行?

由于

5 个答案:

答案 0 :(得分:111)

您可以使用标准输入导入.sql文件,如下所示:

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

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

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

有关建议修改的注意事项:建议的编辑使用内联密码参数稍微改变了这个答案。我可以推荐它用于脚本,但是你应该知道,当你直接在参数(-p<password>)中写密码时,它可以通过shell历史记录缓存,向任何能够读取历史文件的人显示你的密码。而-p要求您通过标准输入输入密码。

答案 1 :(得分:57)

关于导入大文件所花时间的人最重要的是需要更多时间是因为mysql的默认设置是“autocommit = true”,你必须在导入文件之前将其设置为off,然后检查导入如何像gem一样工作。

首先打开MySQL:

  

mysql -u root -p

然后,您只需要执行以下操作:

  

mysql>use your_db

     

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

答案 2 :(得分:8)

+1 @MartinNuc,您可以批量模式运行mysql客户端,然后您将看不到长行的“OK”行。

导入给定SQL文件所需的时间取决于很多事情。不仅是文件的大小,还有文件的类型,服务器服务器的强大程度,以及同时运行的其他内容。

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

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


重新评论,

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

抱歉,没有这样的功能。 mysql客户端不知道运行以后的语句需要多长时间,甚至不知道有多少语句。因此,它无法对完成所需的时间给出有意义的估计。

答案 3 :(得分:0)

我用于大型sql还原的解决方案是mysqldumpsplitter脚本。我将sql.gz拆分为单独的表。然后加载类似mysql workbench的东西并将其作为恢复到所需的模式进行处理。

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

这适用于较大的sql恢复,我使用的一个站点上的平均值是2.5gb sql.gz文件,20GB未压缩,完全恢复后~100Gb

答案 4 :(得分:0)

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

  1. 第一个下载文件。
  2. 在家里粘贴文件。
  3. 在终端机(CMD)中使用以下命令
  4. 语法: mysql -u用户名-p databsename

示例:  mysql -u root -p aanew