首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
deepmindlab
V2EX  ›  程序员

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

  •  
  •   deepmindlab · 199 天前 · 3457 次点击
    这是一个创建于 199 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    推荐 GitHub 出品的 gh-ost 是基于 binlog 的
    https://github.com/github/gh-ost
    deepmindlab
        17
    deepmindlab   199 天前
    主要是新增的同时插入默认值
    dai875939260
        18
    dai875939260   198 天前
    这版本没啥好办法。新的版本好像会比较快 https://mariadb.com/kb/en/instant-add-column-for-innodb/,https://yq.aliyun.com/articles/670691 快速加列
    yincrow
        19
    yincrow   198 天前
    1200w 而已,我司百亿条记录的表,加个索引也就是 10 个小时
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2593 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:23 · PVG 14:23 · LAX 23:23 · JFK 02:23
    ♥ Do have faith in what you're doing.