【问题标题】:MySql Very Large File importMySql 超大文件导入
【发布时间】:2017-08-26 09:19:13
【问题描述】:

我有一个非常大的 MySql 插入脚本,大小为 70GB,有 22,288,088,954 条记录用于插入。 导入此文件的最佳(最快)方法是什么?

我已经设置好了:

innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0

我使用 MySql 命令行客户端执行此文件,但它执行了将近 5 天,当我尝试查看 5 天后插入了多少总记录时,只插入了 4,371,106 条记录。

我使用这个 sql 来查找总插入记录:

SELECT SUM(TABLE_ROWS) 
     FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_SCHEMA LIKE 'mydatabase'

MySql 安装在 Win 10 Pro PC 上,具有 I5 CPU 和 32GB RAM,SSD 磁盘

任何人都可以帮助我并建议一种更快的方法来导入此脚本,因为如果在 5 天内从 22,288,088,954 中只有 4,000,000 条记录,则需要很长时间才能完成。

提前谢谢你。

【问题讨论】:

  • 请注意,标签 [tah:batch-file] 用于一种 Windows 脚本,不处理多个文件。
  • 为什么要这样做?将这么大的数据导出/导入为插入语句是一个非常糟糕的主意。您可能应该以另一种格式导出数据。或者,如果您无法再次获取数据,我建议您在其之上使用一些额外的程序来处理此文件,然后触发 SQL 批量插入和提交较小块的命令。
  • @user3782239 你的insert 声明是什么样的?
  • 您是否检查过 little 的一些内容,例如拥有唯一整数键需要您使用 Long。

标签: mysql sql import


【解决方案1】:

首先,我不相信你。 70 GB 中的 220 亿行是每行超过 3 个字符。如果您使用的是一个插入,那就是(),以及大约另外一个字符。

其次,你的事务日志无疑有问题。您是在每次插入还是几次插入后进行提交?为获得最佳性能,您可能应该在每 1,000 到 100,000 次后提交一次,这样日志文件就不会变得太大。

第三,插入数据的最佳方式根本不是通过插入。你应该使用load data infile。在不到五天的时间里,您应该能够编写一个脚本来将insert 语句转换为输入数据文件。然后你可以加载它。更好的是,回到原始数据并以更合适的格式提取它。

【讨论】:

  • 嗨@Gordon Linoff,首先我不需要撒谎,因为我需要帮助。对于文件,有 68 个单独的文件,所以我单独执行它们,我将所有文件合并到一个 sql 文件中。第三,当我使用 EmEditor Pro 打开那个大文件时,我可以打开那个文件,在右侧我可以看到文件有多大以及它有多少行......这是一个带有图片的链接,显示文件有多大以及它有多少条记录,但我不能等到它打开整个link
  • @Gordon +1,我喜欢你的回答。我要添加的只是将输入分解为更小的部分并多次运行该作业。这提供了在错误中幸存下来的能力,而不必重新做整个事情。
  • @user3782230 。 . .我并不是要暗示你在“撒谎”,这是故意的。您提供的数字不相加。每行数据三个字符有点少。您应该检查问题中的数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 2023-03-11
  • 2012-09-19
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多