twg
V2EX  ›  问与答

有一个问题,有一个很大的表,需要添加一列,有什么好的办法?

  •  
  •   twg · Oct 22, 2020 · 2038 views
    This topic created in 2035 days ago, the information mentioned may be changed or developed.

    公司有些表数据量特别大,大概 3000w,现在需要增加一列,如果直接使用 alter,需要 10min 才能完成,这是完全不能接受的。所以除了新建表和停机,还有什么好的方法?

    PS:数据库使用的事 MySQL 。

    12 replies    2020-10-23 10:06:01 +08:00
    clf
        1
    clf  
       Oct 22, 2020
    读写频繁的话主从切换。

    读写频率一般的话可以考虑一下 pt-osc,gh-ost 这两个工具增加字段。

    最新的 MYSQL8 我记得是可以实现秒级添加字段。
    qiayue
        2
    qiayue  
    PRO
       Oct 22, 2020
    加列是一个很频繁的操作吗?
    如果几个月一次的话,1 小时也可以接受。
    twg
        3
    twg  
    OP
       Oct 22, 2020
    @lychs1998 我们用的是 mysql5.6 版本
    twg
        4
    twg  
    OP
       Oct 22, 2020
    @qiayue 加列不是很频繁,但是会锁住表吧?1 个小时肯定不能接受。
    skymei
        5
    skymei  
       Oct 22, 2020
    同样有疑问,蹭个贴
    x4400177
        6
    x4400177  
       Oct 22, 2020
    停服
    CrazyEight
        7
    CrazyEight  
       Oct 22, 2020
    高性能 MySQL 讲到过:
    ( 1 )不想担风险:在一台不提供服务的机器完成新表的数据同步,再切换机器。
    ( 2 )锁住表,拷贝.frm 文件并做出对应修改,再用新的.frm 文件替换掉旧的.frm 文件。有风险。
    twg
        8
    twg  
    OP
       Oct 22, 2020
    @x4400177 之前有一次就是停服来操作的。
    redtea
        9
    redtea  
       Oct 22, 2020 via iPhone
    借此机会分表吧,500 万就该分了。
    CODEWEA
        10
    CODEWEA  
       Oct 22, 2020
    原表叫 a,复制一个表叫 b,然后给这个表 b 增加列,最后补全表 b 数据
    CODEWEA
        11
    CODEWEA  
       Oct 22, 2020
    其实就是空间换时间
    twg
        12
    twg  
    OP
       Oct 23, 2020
    @CODEWEA 但是这个是不是需要一个从 a 表切换到 b 表的过程?那么还需要修改相应代码所连接的表?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3066 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
    ♥ Do have faith in what you're doing.