我有一个很大的.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文件?
答案 0 :(得分:1)
2件事可能会有所帮助:
pv
查看已经读取了多少.sql文件。这样可以为您提供一个进度条,至少可以告诉您它不是很烂。SHOW PROCESSLIST
查看MySQL当前正在执行的操作。如果它仍在运行,只需使其运行完成即可。如果打开,在还原过程中关闭二进制日志可能确实有帮助。另一件事可能有用也可能无用...如果您有选择,请尝试使用可用的最快的磁盘。如果您在像Amazon这样的托管服务商上运行,则可能有这种选择。如果(例如)在标准EC2主机上执行此操作,您将真的感到痛苦。
答案 1 :(得分:1)
将文件分成较小的块,然后分别进行处理。
您可能正在达到日志记录的最高水准,而mysql试图回滚所有内容,这是一个缓慢的过程。
将文件拆分为大约1Gb的块,整行中断。也许使用:
split -l 1000000 bigfile.sql part.
然后使用您当前的命令依次运行它们。
您必须尝试使用split
来获得正确的大小,而您尚未说出您的操作系统是什么,并且split
的实现/选项有所不同。 split --number=100
为您服务。
答案 2 :(得分:1)