我正在尝试通过 Ubuntu 中的命令行将大约 300MB 的 sql 文件导入 MySql。我用了
source /var/www/myfile.sql;
现在它正在显示看似无限的行:
Query OK, 1 row affected (0.03 sec)
然而,它现在已经运行了一段时间。我之前没有导入过这么大的文件,所以我只想知道这是否正常,如果进程停止或有一些错误,这会出现在命令行中还是会无限期地继续下去?
谢谢
您可以使用标准输入导入 .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
要求您通过标准输入输入密码。
关于导入大文件所花费的时间的人,最重要的是需要更多时间,因为 mysql 的默认设置是“autocommit = true”,您必须在导入文件之前将其设置为关闭,然后检查导入如何像宝石一样工作......
首先打开MySQL:
mysql -u 根目录 -p
然后,您只需要执行以下操作:
mysql>use your_db
mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
+1 @MartinNuc,您可以mysql
在批处理模式下运行客户端,然后您将看不到“OK”行的长流。
导入给定 SQL 文件所需的时间取决于很多因素。不仅是文件的大小,还有其中的语句类型、你的服务器服务器有多强大,以及同时运行的其他东西有多少。
@MartinNuc 说他可以在 4-5 分钟内加载 4GB 的 SQL,但我已经运行了 0.5GB 的 SQL 文件,并且在较小的服务器上需要 45 分钟。
我们真的无法猜测在服务器上运行 SQL 脚本需要多长时间。
回复你的评论,
@MartinNuc 是正确的,您可以选择让 mysql 客户端打印每条语句。或者您可以打开第二个会话并运行mysql> SHOW PROCESSLIST
以查看正在运行的内容。但是您可能对“完成百分比”数字或完成剩余语句所需的估计时间更感兴趣。
对不起,没有这样的功能。mysql客户端不知道运行后面的语句需要多长时间,甚至不知道有多少。因此,它无法对完成所需的时间给出有意义的估计。
我用于大型 sql 还原的解决方案是 mysqldumpsplitter 脚本。我将我的 sql.gz 拆分为单独的表。然后加载 mysql workbench 之类的东西并将其处理为恢复到所需的模式。
这是脚本 https://github.com/kedarvj/mysqldumpsplitter
这适用于较大的 sql 恢复,我使用的一个站点上的平均数据是 2.5gb sql.gz 文件,未压缩 20GB,完全恢复后约 100Gb
通过命令行将大型 sql 文件导入 MySql
示例:mysql -u root -p aanew < aanew.sql