如何打开和处理转储中生成的非常大的.SQL文件?

时间:2019-07-17 11:31:32

标签: mysql sql

我有一个很大的.SQL文件,大小为90 GB

它是通过服务器上的转储生成的:

mysqldump -u root -p siafi > /home/user_1/siafi.sql

我在装有Ubuntu 16.04和MySQL Community Server(8.0.16)的计算机上下载了此.SQL文件。它有8GB的内存

所以我在终端中执行了以下步骤:

# Access
/usr/bin/mysql -u root -p

# I create a database with the same name to receive the .SQL information
CREATE DATABASE siafi;

# I establish the privileges. User reinaldo
GRANT ALL PRIVILEGES ON siafi.* to reinaldo@localhost;

# Enable the changes
FLUSH PRIVILEGES;

# Then I open another terminal and type command for the created database to receive the data from the .SQL file
mysql --user=reinaldo --password="type_here" --database=siafi < /home/reinaldo/Documentos/Code/test/siafi.sql

我在其他.SQL文件中键入了相同的命令,只有次要的,最大2GB。而且正常工作

但是这个90GB的文件正在处理十二个小时以上,而且没有停止。我不知道它是否有效

请,有没有更有效的方法?也许要分割.SQL文件?

3 个答案:

答案 0 :(得分:1)

2件事可能会有所帮助:

  1. 使用pv查看已经读取了多少.sql文件。这样可以为您提供一个进度条,至少可以告诉您它不是很烂。
  2. 登录MySQL并使用SHOW PROCESSLIST查看MySQL当前正在执行的操作。如果它仍在运行,只需使其运行完成即可。

如果打开,在还原过程中关闭二进制日志可能确实有帮助。另一件事可能有用也可能无用...如果您有选择,请尝试使用可用的最快的磁盘。如果您在像Amazon这样的托管服务商上运行,则可能有这种选择。如果(例如)在标准EC2主机上执行此操作,您将真的感到痛苦。

答案 1 :(得分:1)

将文件分成较小的块,然后分别进行处理。

您可能正在达到日志记录的最高水准,而mysql试图回滚所有内容,这是一个缓慢的过程。

将文件拆分为大约1Gb的块,整行中断。也许使用:

split -l 1000000 bigfile.sql part.

然后使用您当前的命令依次运行它们。

您必须尝试使用​​split来获得正确的大小,而您尚未说出您的操作系统是什么,并且split的实现/选项有所不同。 split --number=100为您服务。

答案 2 :(得分:1)

您可以使用第三方工具,例如 https://philiplb.de/sqldumpsplitter3/

非常易于使用,可以定义大小,位置等...

或者也使用这个 一样,但是界面有点丰富多彩,可以使用

https://sqldumpsplitter.net/