mysql 数据导出问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX    Node.js

mysql 数据导出问题

  •  
  •   imherer 2018-02-02 11:48:10 +08:00 5029 次点击
    这是一个创建于 2812 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 nodejs 实现 总共有 12 个 table,每次导出需要把 12 张表里的部分内容全部导出,导出的数据总共加起来最多几万行左右(应该不超过 5W ) 要求把导出的结果放在 excel 或者.csv 文件里,看了下.csv 好像不支持多个标签 如果放在 excel 里的话可以用一个文件+12 标签搞定(分 12 个文件也没问题),.csv 的话应该只能分 12 个文件了,不过也可以

    现在主要的问题是如何导出:

    1.用户点击了导出按钮,12 张表依次 select 然后保存到 excel,然后再下载(或者全部导出写到一个文件里最后下载,或者 12 个文件打成 zip 再下载)

    2.好像有一个SELECT INTO OUTFILE 的语句,这样的话就是分别导出为 12 个文件最后下载

    不知道各位大佬有没有做过类似的功能,上面 2 种方式哪个效率高,还有别的实现方案吗?

    12 条回复    2018-02-02 17:53:24 +08:00
    liuzuo
        1
    liuzuo  
       2018-02-02 12:25:36 +08:00
    是不是可以使用 mysqldump 导出?
    imherer
        2
    imherer  
    OP
       018-02-02 12:26:57 +08:00
    mysqldump 能导出为除 sql 以外的格式么?
    fuyufjh
        3
    fuyufjh  
       2018-02-02 12:44:14 +08:00   2
    SELECT INTO OUTFILE 是个反模式,最好不要用。数据库应该只提供数据服务,不应该存储文件。举个例子,万一某天应用服务器和 MySQL 分开部署了呢?

    个人觉得最佳方案是创建一个后台任务,异步执行,成功以后把文件放到指定的位置,把 URL 通知给前端
    wdlth
        4
    wdlth  
       2018-02-02 13:14:53 +08:00 via iPhone   1
    用计划任务比较好,最好是配一个只读从库用于导出操作,不要在线上业务库做。
    panpanpan
        5
    panpanpan  
       2018-02-02 14:27:31 +08:00   1
    mysqldump 效率最高,并且支持 csv,导出之后一封邮件就发出去了
    Cbdy
        6
    Cbdy  
       2018-02-02 14:38:06 +08:00 via Android
    起一个异步任务,导出打包存到 OSS,然后通知后端服务,最近我就这么做了一个功能,Node.js 百来行代码
    eslizn
        7
    eslizn  
       2018-02-02 14:42:00 +08:00   1
    6L 的异步才是正解,不然你数据量大了 web 实时处理必超时
    imherer
        8
    imherer  
    OP
       2018-02-02 14:53:54 +08:00
    @Cbdy 导出用是什么方式呢?
    Cbdy
        9
    Cbdy  
       2018-02-02 15:24:34 +08:00 via Android   1
    @imherer exceljs
    abusizhishen
        10
    abusizhishen  
       2018-02-02 17:22:21 +08:00 via Android
    @fuyufjh 这个方式不错
    qiuleo
        11
    qiuleo  
       2018-02-02 17:40:32 +08:00   1
    生成数据的导出是 nodejs 的问题,跟 Mysql 一点关系都没有。如果说有关系,那就是怎么用 SQL 语句从 mysql 查出来而已,而怎么组装成需要的数据格式,是在 nodejs 里做的。看场景,如果只是一次导出,用 mysql 的 dump 也是可以。
    neocanable
        12
    neocanable  
       2018-02-02 17:53:24 +08:00   1
    第二种明显是不可取的,千万不要用。

    SELECT INTO OUTFILE 要求写入的目录 mysql 至少有写权限,如果你的程序再赋这个目录的权限,到时候你会哭。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5832 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 02:28 PVG 10:28 LAX 19:28 JFK 22:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86