【问题标题】:Insert Large (4 GB) CSV into Mysql Database (web server)将大 (4 GB) CSV 插入 Mysql 数据库(Web 服务器)
【发布时间】:2014-04-13 19:13:00
【问题描述】:

我一直在研究这个主题一段时间,但没有成功。这是问题所在: 我有一个 4.5GB 的 csv 文件需要插入到我的 mysql 数据库中。该文件太大而无法通过 phpmyadmin(最大 55 MiB)导入,并且太大而无法上传到我的 Web 服务器(最大磁盘空间为 1000 MB)。在这一点上,我不确定是否有可能完成我需要做的事情。我知道如何使用 LOAD DATA LOCAL INFILE,但是如果 csv 文件已经在我的 Web 服务器上,我就无法执行该命令。任何想法将不胜感激。

如果有帮助的话,附注:我从ftp://alt.ncsbe.gov/data 下载了 csv 文件。这个网站是我每周获取信息的地方。我不确定是否可以从所述站点下载我需要的信息并将其插入到我的数据库中,而无需将其下载到我的物理机上。只是一个随机的想法,但我更专注于第一个问题。

【问题讨论】:

  • 您的 MySQL 实例在哪里运行?该实例是否允许该大小的数据库?如果它在 Web 服务器上运行,或者在相同配置的机器上运行,则不会。
  • 假设 MySQL 实例允许 允许该大小的数据库,它是否允许远程连接,或者您只能从网络服务器连接?如果您可以远程连接,您可能可以使用带有LOAD DATA LOCAL INFILE 的MySQL 客户端(无论是官方命令行工具、官方Workbench GUI 还是某些第三方应用程序)(服务器配置允许);否则您可能必须将 CSV 分成 1GiB 块(或者您的主机可能会为您提供一些特殊的访问权限,例如通过电子邮件将指向 CSV 的链接发送给他们,以便他们手动导入)。
  • 加载此文件后,MySQL 数据库会有多大?在本地尝试,如果它大于 1G,那么我认为您需要升级您的托管帐户。请记住,设置一台可以做到这一点的机器 - 如果您愿意自己管理 VPS - 每月可能需要花费几英镑/美元 - 所以与不合适的帐户作斗争没有什么价值。
  • 我想我是对的,在这么小的 Web 服务器上是不可能的。感谢您的确认。

标签: php mysql sql csv


【解决方案1】:

我实际上在使用相同的数据源。

这对我来说似乎很有效:将数据输入文件'ncvoter92.txt'装入表nc.ncvoter92 由'\t'终止的列由'"'终止的行'\r\n'忽略1行;

如果您正在寻找 GUI 选项,我使用 phpMyAdmin 的导入功能获得了更好的成功:

  • 格式 = CSV(不是使用加载数据的 CSV)
  • 用 = \t 分隔的列
  • 用 = " 括起来的列
  • 用 = " 转义的列
  • 以 = auto 结尾的行
  • CHECK = 文件的第一行包含表列名(如果未选中,第一行将成为数据的一部分)

顺便说一句...我注意到 FTP 上的许多平面文件至少在 Linux 服务器上存在一致性问题。您可能需要稍微清理一下数据以帮助避免错误。

希望这会有所帮助!如果您对数据源有任何具体问题,请随时与我们联系。

【讨论】:

  • 我使用了类似的东西: LOAD DATA LOCAL INFILE '/home/user/public_html/path/to/file/ncvoter_Statewide.txt' INTO TABLE week1 COLUMNS TERMINATED BY '\t' ENCLOSED by '"' (@ignore,county,voternum,@ignore,status,@ignore,...,); 4.5 Gig 文本文件如何使用导入功能?对我来说,52 MB 是最大文件大小。
【解决方案2】:

假设 mysql 服务器接受远程连接,以下命令将起作用(它适用于亚马逊 AWS(Amazon 关系数据库服务)。它还假设它有空间供它使用,因为 mysql 会将其写入磁盘。它真的取决于您的设置,因为它可以使用具有更多空间的不同分区。

你需要在自己的机器上运行命令,--local指定文件是本地的。

更多详情请见https://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html

mysqlimport --fields-terminated-by=,\
            --local\
            --host=example.com \
            -u username\
            -p /path/to/csv-file

【讨论】:

  • 您知道是否可以在 .zip 文件上使用 LOAD DATA LOCAL INFILE 吗?这将允许我将 txt 文件上传到我的 Web 服务器并使用 LOAD DATA LOCAL INFILE 命令而不会耗尽磁盘空间。
  • 我从未尝试过,但似乎可行:link 您也可以将每个小于 1GB 的文件分成 5 个文件并分别导入 只要您有足够的空间数据库本身
  • 从您发布的链接中:“我很确定您需要一个普通的纯文本文件并且不支持压缩。”
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2021-03-15
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
相关资源
最近更新 更多