mysql 导入超大 sql 文件有什么办法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Dreamerwwr
V2EX    程序员

mysql 导入超大 sql 文件有什么办法

  •  1
     
  •   Dreamerwwr 2021-02-01 10:35:20 +08:00 5219 次点击
    这是一个创建于 1717 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这里的 sql 文件,大概 120GB,如何能导入到 mysql 呢?有什么优化呢? 我这里使用的是 source xxx.sql 进行导入,但是好像阻塞了,非常慢。例如这样:

    Query OK, 1727 rows affected (18.47 sec) Records: 1727 Duplicates: 0 Warnings: 0 Query OK, 1703 rows affected (14.58 sec) Records: 1703 Duplicates: 0 Warnings: 0 Query OK, 1717 rows affected (12.20 sec) Records: 1717 Duplicates: 0 Warnings: 0 Query OK, 1699 rows affected (21.12 sec) Records: 1699 Duplicates: 0 Warnings: 0 Query OK, 1706 rows affected (13.85 sec) Records: 1706 Duplicates: 0 Warnings: 0 Query OK, 1704 rows affected (19.86 sec) Records: 1704 Duplicates: 0 Warnings: 0 

    而且我查询数据时, 特别耗时:

    select count(*) from tabale; +-----------+ | count(*) | +-----------+ | 180189257 | +-----------+ 1 row in set (19 min 51.76 sec) 

    请教各位,有什么优化方案和优化吗?感谢不吝点拨:

    第 1 条附言    2021-02-02 16:45:10 +08:00
    此处的这个 sql 文件,里面就是 insert,一个文件大概 120GB:
    各位,这个 sql 文件拆分多个的话,怎么拆分?
    我程序导的话,我该怎么做,一个 sql 文件就 120GB,我程序去读吗?
    27 条回复    2021-02-02 17:14:06 +08:00
    Duolingo
        1
    Duolingo  
       2021-02-01 10:38:33 +08:00 via Android
    单表一亿行,count 怎么都快不起来吧。
    另外如果 sql 文件是逐行 insert 的,瓶颈在硬盘上。
    如果 sql 文件是批量的,不确定 source 和直接 mysql<file.sql 效率会不会有区别,可以试试。
    eason1874
        2
    eason1874  
       2021-02-01 10:44:33 +08:00
    120GB 是肯定慢的,就看慢到什么程度了,按套路云 140MB 的硬盘 I/O 速度,按顶格算光写入都得 15 分钟
    zhengxiaowai
        3
    zhengxiaowai  
       2021-02-01 10:47:55 +08:00
    6 年前亲测,你把数据导出成 csv,文件太大可以分多个,速度至少快 100 被以上。
    wuwukai007
        4
    wuwukai007  
       2021-02-01 10:52:36 +08:00 via Android
    直接把 data 文件拷贝过去
    kifile
        5
    kifile  
       2021-02-01 11:04:15 +08:00
    我觉得可以从几个地方优化一下:
    1. 关闭 binlog,降低磁盘 io
    2. 因为数据量超大,数据表开启 partition, 将不同的数据写入到不同的 partition 中
    3. 上 ssd
    F281M6Dh8DXpD1g2
        6
    F281M6Dh8DXpD1g2  
       2021-02-01 11:12:47 +08:00
    load infile 完事
    zzzmh
        7
    zzzmh  
       2021-02-01 11:37:32 +08:00
    我用程序控制批量导入 例如每次 1W 条,然后在固态硬盘的机器上,能稍微快点。。。。。如果你是服务器就 24 小时一直导着呗,以前 dba 上班不是说一条命令跑一周么 doge
    msg7086
        8
    msg7086  
       2021-02-01 11:40:31 +08:00
    SSD 。
    如果解决不了,买更快的 SSD 。
    talen666
        9
    talen666  
       2021-02-01 11:41:27 +08:00
    拆成多个文件试试
    livepps
        10
    livepps  
       2021-02-01 12:03:09 +08:00 via Android
    项目里面的数据,5g source 写入本地花了 10 分钟,固态硬盘
    340244120w
        11
    340244120w  
       2021-02-01 12:15:44 +08:00 via iPhone
    还有就是把索引 外键 触发器啥的先去掉
    love
        12
    love  
       2021-02-01 12:40:30 +08:00
    看进度也不能用 count,用了会更慢。select max(id)这种就瞬间出来。
    DarkCat123
        13
    DarkCat123  
       2021-02-01 12:40:50 +08:00
    先 disable key,倒入完了再 打开 key 。
    varrily
        14
    varrily  
       2021-02-01 12:47:35 +08:00
    mysqldump
    bthulu
        15
    bthulu  
       2021-02-01 13:30:43 +08:00
    source 是一条一条执行的, 相当慢. 想办法搞成批处理, 一批导入 1000 条, 每 10000 条再提交一次. 或者在配置文件中改 innodb_flush_log_at_trx_commit=2, 再重启 mysql, 插入性能提高至少 20 倍以上.
    wowbaby
        16
    wowbaby  
       2021-02-01 13:44:08 +08:00
    我当年 SB,在机房使用 source 方式导入,在机房导入一夜数据都导入不完,而且中途出错还得重导,后来用 navicat,就两个小时,如果有源数据库,使用数据传输估计会更快。
    gam2046
        17
    gam2046  
       2021-02-01 14:00:43 +08:00
    如果是插入操作,可以先把索引、约束等等都删掉,全部导入以后,再重建索引,插入速度会快很多
    Qute
        18
    Qute  
       2021-02-01 14:12:57 +08:00
    1 、文件分成几份试一下
    2 、去掉索引什么的,等导入完毕之后统一加

    另外,如果想要看倒入了多少条的话可以 explain select count(*) from xxx,这样不会阻塞,但是获得的是一个粗略值,用来看大概的条数是没问题的
    Lee2019
        19
    Lee2019  
       2021-02-01 14:13:35 +08:00
    如果可以停库的话,把数据目录直接 copy 过去最快
    weizhen199
        20
    weizhen199  
       2021-02-01 15:24:22 +08:00
    你这说的我以为是 120G 的 insert sql 。。
    jzmws
        21
    jzmws  
       2021-02-01 15:51:09 +08:00
    直接导出文件 xtrabackup 用这个迁移
    zxbutton
        22
    zxbutton  
       2021-02-01 16:38:50 +08:00
    切分文件,去掉索引啥的,用 load data infile
    cheng6563
        23
    cheng6563  
       2021-02-01 17:04:30 +08:00
    @wowbaby 为啥 navicat 会比较快?是 navicat 会自动合并 Insert 吗?
    bthulu
        24
    bthulu  
       2021-02-01 18:19:05 +08:00
    @cheng6563 navicat 是批处理
    cveoy
        25
    cveoy  
       2021-02-01 19:32:18 +08:00
    这是裤子吗?
    janssenkm
        26
    janssenkm  
       2021-02-02 00:58:55 +08:00
    @cveoy 我猜就是裤子。
    Dreamerwwr
        27
    Dreamerwwr  
    OP
       2021-02-02 17:14:06 +08:00
    @weizhen199 是的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     875 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:58 PVG 04:58 LAX 13:58 JFK 16:58
    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