V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
userlijinhong
V2EX  ›  MySQL

mysql 如何导入 20g 的超大文件

  •  
  •   userlijinhong ·
    LiJinHongPassion · 2020-11-24 09:44:44 +08:00 · 8847 次点击
    这是一个创建于 1467 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近对 mysql 如何导入超大文件比较感兴趣。我看网上的教程方法乱七八糟,什么 navicat 导入都说出来了,我目前的思路是先将文本划分为小文本,然后再导入。不知道有没有更好的办法,求教!
    51 条回复    2022-09-09 21:29:13 +08:00
    mrhhsg
        1
    mrhhsg  
       2020-11-24 10:10:51 +08:00   ❤️ 7
    楼主是不是对“超大”有什么误解?
    Citrullus
        2
    Citrullus  
       2020-11-24 10:12:36 +08:00   ❤️ 5
    你这是 8 亿数据的吧😏
    des
        3
    des  
       2020-11-24 10:14:16 +08:00   ❤️ 1
    不说说是什么文件? csv ? sql ?还是 log ?
    wangkun025
        4
    wangkun025  
       2020-11-24 10:15:46 +08:00
    不说什么数据,一律按照🍠处理。
    dzdh
        5
    dzdh  
       2020-11-24 10:20:26 +08:00
    不管多大直接 `mysql -Ux -px -hx < source.sql`
    rabbirbot00
        6
    rabbirbot00  
       2020-11-24 10:24:00 +08:00
    navicat 可以导入啊,csv 起码是可以的,txt 没有试过,设置好分隔符应该和 csv 一样的吧
    liprais
        7
    liprais  
       2020-11-24 10:25:38 +08:00
    load infile
    KouShuiYu
        8
    KouShuiYu  
       2020-11-24 10:51:47 +08:00
    @wangkun025 红薯?
    wangkun025
        9
    wangkun025  
       2020-11-24 11:02:33 +08:00
    @KouShuiYu 嗯嗯。
    lTsuKi
        10
    lTsuKi  
       2020-11-24 11:06:39 +08:00 via Android
    MySQL 直接用 load data infile 呀
    如果是 8e 数据那有一行有点问题,建议清理了再导入🌚👌🏻
    zhongjun96
        11
    zhongjun96  
       2020-11-24 11:43:35 +08:00
    @lTsuKi #10 导入一小时了,才导入 2e,有啥快速导入的方法吗?或者有啥直接查找的方法 ?用 cat 等半天,less 也是半天
    beryl
        12
    beryl  
       2020-11-24 11:47:59 +08:00
    直接 load data infile 问题不大,但是可能需要考虑导入过程中间出现问题怎么办,例如连接断了,某一行数据异常,针对这种情况,可以先将文件切分为几个,避免异常后,重新处理的成本
    samzong
        13
    samzong  
       2020-11-24 11:59:55 +08:00
    最多导入的时候用了 50 分钟,还原一个 db,对心态的极其考验
    Hconk
        14
    Hconk  
       2020-11-24 12:38:02 +08:00 via iPhone
    @zhongjun96 rg 直接搜
    wzq001
        15
    wzq001  
       2020-11-24 12:49:52 +08:00
    插个眼~!
    dog82
        16
    dog82  
       2020-11-24 13:27:40 +08:00
    要说清楚 20G 是啥
    funbox
        17
    funbox  
       2020-11-24 13:53:34 +08:00   ❤️ 3
    进入 mysql
    mysql -u root -p

    创建数据库
    CREATE DATABASE 数据库名;

    设置参数
    set sql_log_bin=OFF;//关闭日志
    set autocommit=0;//关闭 autocommit 自动提交模式

    使用数据库
    use 数据库名;

    开启事务
    START TRANSACTION;

    引入 SQL 文件
    source 文件的路径;

    成功后事务提交
    COMMIT;
    MurphyL0
        18
    MurphyL0  
       2020-11-24 13:58:57 +08:00 via Android
    load data infile...
    lTsuKi
        19
    lTsuKi  
       2020-11-24 14:29:10 +08:00 via Android
    @zhongjun96 用 load data infile 大概几十分钟就导入完了,不过索引建了 2 个多小时,最后 3 小时 20 分钟完成,数据 22G,可秒查了
    Cll66
        20
    Cll66  
       2020-11-24 14:32:55 +08:00   ❤️ 2
    微博裤子?
    towser
        21
    towser  
       2020-11-24 14:38:32 +08:00
    泄漏的电话?
    userlijinhong
        22
    userlijinhong  
    OP
       2020-11-24 15:04:42 +08:00
    @mrhhsg 我说的超大是文件大小,不知道这样说是否合理,或者说你们对超大有什么其他的见解 (我竟然不知道怎么在这上面发表情)
    userlijinhong
        23
    userlijinhong  
    OP
       2020-11-24 15:07:13 +08:00
    @des csv
    userlijinhong
        24
    userlijinhong  
    OP
       2020-11-24 15:13:15 +08:00
    navicat 是可以导入,但是考虑到网络 IO 的问题,可能会比较慢;然后数据文件还是在服务器上的,本地文件的读取就不用考虑数据路由,网络带宽等因素了
    aice755169
        25
    aice755169  
       2020-11-24 15:16:55 +08:00
    什么格式没说,不同格式 效率差很多的
    userlijinhong
        26
    userlijinhong  
    OP
       2020-11-24 15:19:18 +08:00
    @funbox 对于这种手动提交事务的话,我觉得还是把文件划分为小文件了再导入,万一数据出错,又要重新来
    userlijinhong
        27
    userlijinhong  
    OP
       2020-11-24 15:19:59 +08:00
    @lTsuKi 我等哈去试一哈
    userlijinhong
        28
    userlijinhong  
    OP
       2020-11-24 15:21:53 +08:00
    @aice755169 是我大意了,格式的话是 cvs
    ruzztok
        29
    ruzztok  
       2020-11-24 15:35:15 +08:00   ❤️ 1
    我还以为你要导入一部电影到数据库中
    userlijinhong
        30
    userlijinhong  
    OP
       2020-11-24 15:42:40 +08:00
    @KouShuiYu 我开始看半天嗯是没看懂这个红薯...不过我没那么多的红薯资料
    Hodor
        31
    Hodor  
       2020-11-24 15:44:47 +08:00
    文件发我,我帮你测试一下啊,哈哈哈
    userlijinhong
        32
    userlijinhong  
    OP
       2020-11-24 15:48:25 +08:00
    @Hodor 这就不劳烦兄弟,我觉得我能行,哈哈嗝
    Donss
        33
    Donss  
       2020-11-24 16:47:29 +08:00
    datax?
    lixintcwdsg
        34
    lixintcwdsg  
       2020-11-24 16:48:02 +08:00
    不管如何,一定要用 load data,其余效率和 load data 都差好远
    然后文件要分割一下
    lyy16384
        35
    lyy16384  
       2020-11-24 17:11:13 +08:00
    我觉得直接写程序插入就行,多线程,一次 insert 多行,批量提交事务,直接拼 sql 不要用参数化,程序和数据库放一台机器上,其他访问数据库的服务都先下线
    以前用这种方式迁移过两亿条数据,而且是一边读 db 一边处理逻辑一边写 db,只要半小时左右
    dorothyREN
        36
    dorothyREN  
       2020-11-24 17:35:18 +08:00
    20G 真不算大
    Shuiss
        37
    Shuiss  
       2020-11-24 18:26:33 +08:00
    @wangkun025 红薯是什么?
    wangkun025
        38
    wangkun025  
       2020-11-24 18:47:48 +08:00
    @Shuiss 随口一说而已。别当真。抱歉带来困扰。
    毕竟楼主说大文件,我也不知道是什么啊。后来楼主说是 csv 。
    万一是 sql 呢,万一是 Excel 呢,万一是蓝光高清电影呢,万一是照片呢。
    开始楼主没说啊。就这。
    lostberryzz
        39
    lostberryzz  
       2020-11-24 21:53:26 +08:00   ❤️ 1
    44.65G 神秘文件哈哈哈
    KIzuN1
        40
    KIzuN1  
       2020-11-24 22:04:24 +08:00
    @lostberryzz 制种者为啥把 WB 弄了两份捏
    laminux29
        41
    laminux29  
       2020-11-24 22:08:40 +08:00
    分批导入并校验 + 实时监控各设备负载并不断解决瓶颈
    lostberryzz
        42
    lostberryzz  
       2020-11-25 00:32:11 +08:00
    @KIzuN1 可能是操作失误,两个文件没有区别
    en20
        43
    en20  
       2020-11-25 00:43:41 +08:00 via iPhone
    看不懂各位谜语人,什么红薯 8e,谁能明示一下??
    zhongjun96
        44
    zhongjun96  
       2020-11-25 09:04:55 +08:00
    @en20 #43 红薯 39L 解释了,8e 就是 qq 数据
    kios
        45
    kios  
       2020-11-25 09:53:04 +08:00
    感觉你重新定义了超大这个词汇,哈哈哈哈
    funbox
        46
    funbox  
       2020-11-25 14:36:42 +08:00
    @userlijinhong 这个还好 首先你要吧 sql 文件上传到服务器上 这样的话建立索引的时间会大大缩短 导入会加速的
    toomlo
        47
    toomlo  
       2020-11-25 16:19:04 +08:00
    你要是没机器,就去各种云创建个按量付费的,在 docker 里面搞好镜像在上传
    userlijinhong
        48
    userlijinhong  
    OP
       2020-11-27 09:37:40 +08:00
    @kios 看来我还是个没长个见识的小白,哈哈哈嗝
    csx163
        49
    csx163  
       2020-11-28 10:25:46 +08:00
    为什么没人提 mysqlsh
    Ayersneo
        50
    Ayersneo  
       2020-12-05 00:15:58 +08:00
    我就是这么干的 我是新手效率很低 用 pandas 分了 10 几个小文件后 load data infile 但是还是动不动就报错啥严格模式,啥满了 bulabula😖
    ibin
        51
    ibin  
       2022-09-09 21:29:13 +08:00
    老哥,分享一份
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2816 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.