V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
deepmindlab
V2EX  ›  程序员

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

  •  
  •   deepmindlab · 2019 年 12 月 25 日 · 5664 次点击
    这是一个创建于 2210 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    推荐 GitHub 出品的 gh-ost 是基于 binlog 的
    https://github.com/github/gh-ost
    deepmindlab
        17
    deepmindlab  
    OP
       2019 年 12 月 26 日
    主要是新增的同时插入默认值
    dai875939260
        18
    dai875939260  
       2019 年 12 月 26 日
    这版本没啥好办法。新的版本好像会比较快 https://mariadb.com/kb/en/instant-add-column-for-innodb/,https://yq.aliyun.com/articles/670691 快速加列
    yincrow
        19
    yincrow  
       2019 年 12 月 26 日
    1200w 而已,我司百亿条记录的表,加个索引也就是 10 个小时
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4828 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:52 · PVG 17:52 · LAX 01:52 · JFK 04:52
    ♥ Do have faith in what you're doing.