• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Dreamerwwr
V2EX  ›  程序员

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

  •  1
     
  •   Dreamerwwr · Feb 1, 2021 · 6412 views
    This topic created in 2102 days ago, the information mentioned may be changed or developed.

    我这里的 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)
    

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

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

    另外,如果想要看倒入了多少条的话可以 explain select count(*) from xxx,这样不会阻塞,但是获得的是一个粗略值,用来看大概的条数是没问题的
    Lee2019
    Lee2019
    Feb 1, 2021
    19
    如果可以停库的话,把数据目录直接 copy 过去最快
    weizhen199
    weizhen199
    Feb 1, 2021
    20
    你这说的我以为是 120G 的 insert sql 。。
    jzmws
    jzmws
    Feb 1, 2021
    21
    直接导出文件 xtrabackup 用这个迁移
    zxbutton
    zxbutton
    Feb 1, 2021
    22
    切分文件,去掉索引啥的,用 load data infile
    cheng6563
    cheng6563
    Feb 1, 2021
    23
    @wowbaby 为啥 navicat 会比较快?是 navicat 会自动合并 Insert 吗?
    bthulu
    bthulu
    Feb 1, 2021
    24
    @cheng6563 navicat 是批处理
    cveoy
    cveoy
    Feb 1, 2021
    25
    这是裤子吗?
    janssenkm
    janssenkm
    Feb 2, 2021
    26
    @cveoy 我猜就是裤子。
    Dreamerwwr
    Dreamerwwr
    OP
    Feb 2, 2021
    27
    @weizhen199 是的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5286 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 02:22 · PVG 10:22 · LAX 18:22 · JFK 21:22
    ♥ Do have faith in what you're doing.