Mysql

MySQL失敗並且導入大文件非常慢

  • March 27, 2020

我有一個 47 GB 的 MySQL 轉儲表:

http://dumps.wikimedia.org/commonswiki/latest/commonswiki-latest-image.sql.gz

我最終希望將它放入 PostgreSQL,但由於我沒有找到一種簡單的方法將 MySQL SQL 轉換為我想的 PostgreSQL SQL,我將把它放入 MySQL,然後編寫一個小的 ETL 腳本來執行此操作。

我最初嘗試使用 MySQL WorkBench Data Import/Restore 載入它,但它失敗了。

現在我已經執行split -l 2000 commonswiki-latest-image.sql了 20 個文件,每個文件大約 2 GB,但它仍然失敗:

23:12:28 Restoring C:\temp\commonswiki\xaa.sql

Running: mysql.exe --defaults-extra-file="c:\users\jmurdoch\appdata\local\temp\tmpi_ltz8.cnf"  --host=127.0.0.1 --user=root --port=3306 --default-character-set=utf8 --comments --database=mediawikiimages < "C:\\temp\\commonswiki\\xaa.sql"

ERROR 2013 (HY000) at line 331: Lost connection to MySQL server during query


Operation failed with exitcode 1

00:54:17 Import of C:\temp\commonswiki\xaa.sql has finished with 1 errors

它也非常慢,因為它在近 2 個小時內只導入了 209236 行,但我認為要導入大約 2000 萬個項目,所以按這個速度導入需要 200 個小時。

我使用的是 Windows 7、MySQL 5.6.14 和 MySQL Workbench 6。

我的主要問題:

  • 是否有一個腳本可以為 MySQL 提供拆分文件並在超時時執行自動錯誤恢復?
  • 是否有一種轉換工具可以將 MySQL SQL 轉換為 PostgreSQL SQL 而無需先將其載入到數據庫中?

使用

max_allowed_packet = 256M

在 MySQL 配置中允許導入文件而不會出錯。

kresimir -plese如何將大型 (14 GB) MySQL 轉儲文件導入新的 MySQL 數據庫?在 Stack Overflow 上幫助了我:

mysql -u root -p

set global net_buffer_length=1000000; --Set network buffer length to a large byte number
set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number
SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour

source file.sql --Import your sql dump file

SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete!

並來自nicolas-thery的評論:

在 mariadb 上,檢查最大值:

set global net_buffer_length=1048576;
set global max_allowed_packet=1073741824;

引用自:https://dba.stackexchange.com/questions/58493