导出大型 MySql 表
Posted
技术标签:
【中文标题】导出大型 MySql 表【英文标题】:Exporting Large MySql Table 【发布时间】:2012-06-05 00:33:11 【问题描述】:我在 mysql 中有一个使用 phpMyAdmin 管理的表。目前它大约有 960,000 行。
我有个老板喜欢在Excel里看数据,也就是说每周,我都要把数据导出到Excel中。
我正在寻找一种更有效的方法来做到这一点。因为我实际上不能一次完成整个表格,因为它超时了。所以我一直坚持将表“分块”成更小的查询并像这样导出它。
我尝试将 Excel(和 Access)直接连接到我的数据库,但同样的问题;它超时。有没有办法延长连接限制?
【问题讨论】:
【参考方案1】:你的老板是雨人吗?他只是在原始“数据”中发现“信息”吗?
或者他是在 excel 中构建函数而不是询问他真正需要什么?
和他一起坐一个小时,看看他实际上在用数据做什么。被问到什么问题? (手动)检测到哪些模式?编写一个真正的工具来查找该信息,然后将其插入您的监控/警报系统。
或者,换个新老板。 说真的。你可以告诉他我是这么说的。
【讨论】:
我不会投票赞成这个答案,但这实际上是一个很好的答案。很好的横向思维!【参考方案2】:老实说,对于这种大小的数据,我建议做一个 mysqldump 然后将表导入到另一个安装在其他地方的 MySQL 副本中,也许在专用于该任务的虚拟机上。从那里,您可以设置超时等任意高的时间,而不必担心资源限制会破坏您的生产数据库。在基于 Unix 的操作系统上使用 nice
或在基于 Windows 的系统上使用进程优先级,您应该能够做到这一点,而不会对生产系统产生太大影响。
或者,您可以set up a replica 您的生产数据库并从那里提取数据。拥有一个从生产系统复制各种表甚至整个数据库的所谓“报告数据库”实际上是大型环境中相当普遍的做法,以确保您不会意外杀死生产数据库为某人提取数字。作为一个额外的优势,您不必等待 mysqldump 备份完成才能开始为您的老板提取数据;你可以马上做。
【讨论】:
【参考方案3】:行数不会太多。运行查询以将数据导出到 csv 文件中:
SELECT column,column2 INTO OUTFILE '/path/to/file/result.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM yourtable WHERE columnx = 'çondition';
【讨论】:
【参考方案4】:一种选择是使用SELECT ... INTO OUTFILE
或mysqldump
将表格导出为CSV,然后Excel 可以直接打开。
【讨论】:
以上是关于导出大型 MySql 表的主要内容,如果未能解决你的问题,请参考以下文章