67

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

source /var/www/myfile.sql;

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

Query OK, 1 row affected (0.03 sec)

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

谢谢

4

5 回答 5

123

您可以使用标准输入导入 .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要求您通过标准输入输入密码。

于 2013-10-20T21:32:18.387 回答
64

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

首先打开MySQL:

mysql -u 根目录 -p

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

mysql>use your_db

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

于 2014-04-04T06:40:28.603 回答
8

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

导入给定 SQL 文件所需的时间取决于很多因素。不仅是文件的大小,还有其中的语句类型、你的服务器服务器有多强大,以及同时运行的其他东西有多少。

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

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


回复你的评论,

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

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

于 2013-10-20T21:39:53.683 回答
1

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

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

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

于 2016-07-22T15:25:24.220 回答
-1

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

  1. 首先下载文件。
  2. 将文件粘贴到家中。
  3. 在终端中使用以下命令(CMD)
  4. 语法:mysql -u 用户名 -p 数据库名 < 文件.sql

示例:mysql -u root -p aanew < aanew.sql

于 2018-08-08T05:15:03.983 回答