MySQL 导入 125000 行 CSV 的最快方法?

MySQL Fastest Way To Import 125000 line CSV?

除了对现有数据库进行一些基本查询之外,这是我第一次使用 MySQL,所以我不太擅长解决这个问题。

我有一个包含 125,000 条记录的 CSV,我想将其加载到 MySQL。我安装了版本 8 和 workbench。我使用导入向导加载我的 CSV 文件并开始导入。问题是达到 30,000 条记录大约需要 5 个小时。据我阅读,这是一个很长的时间,应该有一个更快的方法。

我尝试了 LOAD DATA INFILE,但遇到了关于 secure-file-priv 的错误,所以我开始寻找解决方法。 secure-file-priv 的配置似乎已关闭,但它一直作为错误弹出。现在我收到“访问被拒绝”错误,所以我被卡住了。

我是这台机器的管理员,此数据对任何人都没有任何意义,因此安全性不是问题。我只是想学习如何做到这一点。

LOAD DATA INFILE加载他的数据量是最好的方法吗? 20 小时对于 125000 条记录来说太长了吗? 有人知道我做错了什么吗?

如果使用LOAD DATA LOCAL INFILE则不需要设置secure-file-priv。这样客户端就可以在客户端运行的计算机上读取文件内容,这样就不必将文件上传到数据库服务器上的指定目录。如果您无权访问数据库服务器,这将非常有用。

但是本地选项默认是禁用的。您必须在 服务器和客户端中使用 my.cnf 中的 local-infile 选项在服务器上启用它,并在 MySQL 客户端中使用使用 mysql --local-infile.

此外,您的用户必须被授予 FILE 权限才能将文件加载到 table。参见 https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html

一旦开始工作,LOAD DATA INFILE 应该是 bulk-load 数据的最快方式。我为演示文稿做了一堆比较速度测试 Load Data Fast!

您可能还有一些关于 MySQL 服务器配置选项的限制因素,甚至是关于计算机硬件的性能限制。

我认为 30k 记录的 5 小时即使在普通硬件上也太长了。

我在内置 SSD 存储的 Macbook 上进行了测试。即使在我设计得尽可能低效的测试中(打开连接,使用 INSERT 保存一行,断开连接),我仍然能够在 34 秒内插入 290 rows/second 或 10k 行。最好的结果是使用 LOAD DATA INFILE,速度接近 44k rows/second,在 22 秒内加载 100 万行。

所以您的数据库服务器上有些东西严重不足,或者导入向导正在做一些非常低效的事情,我什至无法想象它会是什么。