首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用最少的停机时间在大型Innodb表上更改列长度

问用最少的停机时间在大型Innodb表上更改列长度
EN

Server Fault用户
提问于 2009-05-10 10:00:06
回答 4查看 4.3K关注 0票数 2

我需要更改MySQL innodb表中有164 m行的列的长度。下面是我想运行的脚本: ALTER SESSION_DECISION更改列名VARCHAR(255);

当我尝试运行alter查询时,数据库运行了一个小时,没有完成任务。访问系统的用户(需要写入表)被锁定在外。这是一个实时系统,所以我以ctrl来请求允许用户访问站点。

(这是在半夜

我上的是MySQL 5.0.77。

对于如何在最短的停机时间内更改专栏,有什么建议吗?

EN

回答 4

Server Fault用户

回答已采纳

发布于 2009-05-10 10:12:04

最好的选择是使用mysql复制设置一个从数据库。假设您的架构更改是可加性的,那么您可以在该副本上发出更新,该副本将在更新期间被阻止。一旦完成,并检查您的从已经赶上所有的更新,然后声明一个小的停机时间,以促进您的从数据库的主。

您可以找到关于设置这里的mysql复制.的说明

票数 5
EN

Server Fault用户

发布于 2009-05-10 14:21:56

如果您的数据是严格插入的(而不是更新的),您可能会执行以下操作:

  • 创建一个具有所需定义的新表。
  • 将旧数据复制到新表(确保指定nolock)
  • 关闭对旧桌子的访问
  • 执行从旧到新的增量更新,只为了捕捉在复制时插入的任何内容。
  • 将旧表改名,使新表就位。
  • 恢复访问
票数 1
EN

Server Fault用户

发布于 2009-05-10 10:09:47

当然,这需要很长时间。您应该理解,更改列数据类型,更改底层数据结构,以便数据必须在物理上移动,而且可能需要相当长的时间。我不知道你的硬件的容量,但不管怎么说,都需要一个多小时(想想看,一夜之间)。

至于减少停机时间的方法,你不能直接做。我想您没有数据库的备份实例,是吗?

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/6771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档