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

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

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

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

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

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

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

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

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

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

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