Mysql
MySQL失敗並且導入大文件非常慢
我有一個 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;