gpt4 book ai didi

MySQL Alter huge table(更改字段类型)

转载 作者:行者123 更新时间:2023-11-29 00:16:23 27 4
gpt4 key购买 nike

所以我有一个包含 4 016 515 759 行的表格。我需要将我的 address_id 字段的字段类型从 int 更改为 bigint,它也是一个 FOREIGN KEY

我刚刚测试了这个查询:

SET foreign_key_checks = 0;
ALTER TABLE `my_table` CHANGE address_id address_id bigint;

在具有 6 845 016 行的本地表上 - 需要 14 分钟。我猜生产这 40 亿行需要很长时间。

所以问题是:如何真正快速安全地更新这个?或者我应该复制 my_table 并在此副本上执行 ALTER 然后重命名它吗?

因为停机时间会很长。

最佳答案

编辑:这可能是引擎特定的。

更改具有外键的常用表中的列......你正在进入一个伤害我的 friend 的世界。

如果您在当时实际使用的环境中执行此操作,则整个表将被锁定,直到您的更改完成。为锁定等待超时甚至最大连接错误做好准备。根据您的情况,仅几分钟的变化可能意味着停机。

有些人巧妙地解决了这个问题:

http://www.percona.com/doc/percona-toolkit/2.1/pt-online-schema-change.html

请务必阅读有关外键的部分。

所以...

我个人的方法是避免这样的事情,并试图通过扩大任何可能变得太小和太重要的字段来防止它。所有数字主键等上的无符号双整数。

不过,偶尔,其他人只是踢了一个巨大的变更表,一切都堵塞了,我们达到了最大连接数。很难防止这种情况发生,因为测试不会那么失败:一个简单的测试环境没有那么多流量。

问题是:不可避免的 mysql 重启往往会立即用新结构恢复表。

简短版:

  • 计划停机时间
  • 通过关闭内容来最大程度地减少客户查询
  • 运行修改表
  • 当你开始感到无聊时重启 MySQL

关于MySQL Alter huge table(更改字段类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com