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

mysql 某表 1200w 行数据, 29 个字段,想新增一个字段,是否可行?

  •  
  •   deepmindlab · Dec 25, 2019 · 5933 views
    This topic created in 2331 days ago, the information mentioned may be changed or developed.

    mysql 某表 1200w 行数据,29 个字段,想新增一个字段,是否可行?

    19 replies    2019-12-26 15:20:33 +08:00
    guijianshi01
        1
    guijianshi01  
       Dec 25, 2019
    MySQL 版本多少,5.6 以后和以前两码事
    ben1024
        2
    ben1024  
       Dec 25, 2019
    可行,先增加一个无默认值的字段,在进行赋值。
    有条件先锁表一下
    menduo
        3
    menduo  
       Dec 25, 2019
    可以啊,有什么不可以?
    ksedz
        4
    ksedz  
       Dec 25, 2019
    使用 pt-online-schema-change
    deepmindlab
        5
    deepmindlab  
    OP
       Dec 25, 2019
    看了下,我司居然用的 MariaDB……
    mysql> select version();
    +-----------------+
    | version() |
    +-----------------+
    | 10.0.24-MariaDB |
    +-----------------+
    1 row in set (0.00 sec)
    deepmindlab
        6
    deepmindlab  
    OP
       Dec 25, 2019
    @menduo 主要怕在执行过程中,性能下降,影响现有业务。
    deepmindlab
        7
    deepmindlab  
    OP
       Dec 25, 2019
    @guijianshi01 10.0.24-MariaDB
    sghcel
        8
    sghcel  
       Dec 25, 2019 via Android
    主要的问题是要上表元数据锁,期间的阻塞所有读写请求
    haishiwuyuehao
        9
    haishiwuyuehao  
       Dec 26, 2019   ❤️ 3
    给楼主参考下,我有次是这样处理数据的:
    copy TableA -> TableB (得到)
    TableB 完成所有操作

    TableA 重命名为 TableC
    TableB 重命名为 TableA

    读取 TableA 大于某个点的数据(时间,唯一 ID 等)写入 TableB。完成数据补充

    讲白了就是用张中间表进行操作数据。然后把中间表重命名为原始表,再把原始表的数据进行补充完整。

    表命名基本上不消耗时间,对业务基本上无影响。

    如果你担心影响线上数据库,也可以进行表同步到其他环境,完成操作再弄数据。
    xcstream
        10
    xcstream  
       Dec 26, 2019
    1200w 不是很大找个晚上随便加一下就可以了
    markgor
        11
    markgor  
       Dec 26, 2019
    工具:pt-online-schema-change
    手動:
    源表複製架構去新表;
    新表加字段;
    源表加觸發器(插入更新刪除)同步觸發到新錶;
    複製源表數據到新錶。
    PonysDad
        12
    PonysDad  
       Dec 26, 2019 via iPhone
    按 9 楼操作
    securityCoding
        13
    securityCoding  
       Dec 26, 2019
    增加临时表吧,不要直接在原表上面干
    optional
        14
    optional  
       Dec 26, 2019
    不带默认值和 not null, 1200w 也就几秒钟吧
    leorealman
        15
    leorealman  
       Dec 26, 2019
    1200w 而已,在线直接梭哈.
    Kymair
        16
    Kymair  
       Dec 26, 2019
    pt-online-schema-change 用的触发器,会对原库性能有一定影响(同步调用)

    推荐 GitHub 出品的 gh-ost 是基于 binlog 的
    https://github.com/github/gh-ost
    deepmindlab
        17
    deepmindlab  
    OP
       Dec 26, 2019
    主要是新增的同时插入默认值
    dai875939260
        18
    dai875939260  
       Dec 26, 2019
    这版本没啥好办法。新的版本好像会比较快 https://mariadb.com/kb/en/instant-add-column-for-innodb/,https://yq.aliyun.com/articles/670691 快速加列
    yincrow
        19
    yincrow  
       Dec 26, 2019
    1200w 而已,我司百亿条记录的表,加个索引也就是 10 个小时
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1136 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 23:04 · PVG 07:04 · LAX 16:04 · JFK 19:04
    ♥ Do have faith in what you're doing.