我有一个在Amazon RDS中运行的MySQL数据库,我想知道如何将整个表导出为CSV格式。
我目前使用Windows上的MySQL服务器来查询Amazon数据库,但是当我尝试运行导出时,我得到了一个错误,可能是因为没有用于Amazon RDS的专用文件服务器。有解决方案吗?
我有一个在Amazon RDS中运行的MySQL数据库,我想知道如何将整个表导出为CSV格式。
我目前使用Windows上的MySQL服务器来查询Amazon数据库,但是当我尝试运行导出时,我得到了一个错误,可能是因为没有用于Amazon RDS的专用文件服务器。有解决方案吗?
7条答案
按热度按时间mbjcgjjk1#
假设您正尝试通过
SELECT ... INTO OUTFILE
查询从Amazon RDS数据库导出,这确实会产生此常见问题,例如export database to CSV。相应的AWS团队响应证实了您的假设,即缺少服务器访问权限会阻止此类导出,并通过导出 * 建议了替代方法通过在MySQL命令行客户端中选择数据并通过管道将输出重新格式化为CSV*,将数据转换为CSV格式,如下所示:用户fpalero提供了一种替代的、据说更简单的方法,如果你事先知道并指定字段的话:
ds97pgxw2#
首先,Steffen的答案在大多数情况下都有效。
我最近遇到了一些更大、更复杂的输出,其中“sed”是不够的,于是我决定提出一个简单的实用程序来完成这一任务。
我构建了一个名为sql2csv的模块,它可以解析MySQL CLI的输出:
您也可以使用内置CLI:
有关更多信息,请参阅 sql2csv(GitHub)。
jv2fixgn3#
假设在RDS中使用MySQL,另一种选择是使用批处理模式,它输出制表符分隔的值,并转义换行符、制表符和其他特殊字符。我还没有发现一个CSV导入工具不能处理制表符分隔的数据。例如:
正如Halfgaar所指出的,
--quick
选项会立即刷新,因此它避免了大型表的内存不足错误。要引用字符串(推荐),您需要在查询中做一些额外的工作:REPLACE
对text_column
值中的任何双引号字符进行转义。我还建议对日期时间字段使用iso8601字符串,因此:请注意,如果您有NULL列值,CONCAT将返回NULL.
我已经在一些相当大的表上运行了这个程序,性能相当不错。在与RDS示例相同的VPC中运行MySQL命令时,6亿行和23 GB数据花费了大约30分钟。
xghobddn4#
AWS有一个新的方法来做这件事。只要使用他们的DMS(数据库迁移服务)。
以下是有关如何将表导出到S3存储上的文件的文档:****
您将有可能以两种格式导出:CSV或Parquet中的一个或多个。
4ngedf3f5#
我在EC2上使用Yii框架连接到RDS MySQL。关键是使用fputcsv()。下面的代码在我的本地主机和生产环境中都能很好地工作。
bxjv4tth6#
如果你使用Steffen Opel的解决方案,你会注意到它生成了一个包含'concat'字符串文字的头文件。显然这不是你想要的。很可能你想要的是数据的相应头文件。
除了替换列名和表名外,此查询无需任何修改即可运行:
我刚刚在 Numbers OS X应用程序中打开了结果,输出看起来很完美。
nue99wik7#
对于一个非常大的表(~ 500 m行),即使使用
--quick
,也没有任何内容被写入到我的导出文件中,并且该过程从未完成(+6小时)。我编写了下面的bash脚本来解决这个问题。另一个好处是,在写入每个批处理文件时,您都可以看到进度指示。只要您有某种顺序列(例如,自动递增的整数PK或日期列),此解决方案就能很好地工作。如果您有大量数据,请确保您的日期列已编制索引!
另一种稍微不同的方法可能会更快,具体取决于您已建立的索引,该方法是按月逐个查看数据:
希望这能帮助到一些人