11

我需要在当前表中添加一列。

这张桌子在白天和晚上都被大量使用。我发现我需要使用此处找到的更改命令进行更改

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

我在开发服务器上对其进行了测试。

我花了大约 2 个小时完成。现在我想在生产服务器上执行这个?

这会停止我的网站吗?

4

4 回答 4

14

为什么不在网站上显示一条消息,说明您将从 UTC 时间 2012 年 1 月 7 日午夜开始执行维护。

这样,您不会破坏任何数据,也不会收到任何 mysql 错误。您执行 ALTER 并在站点完成后再次启动该站点(不要忘记您的代码以确保您拥有正确的字段等)。轻松解决。

Stackoverflow 做到了,为什么不是你的呢?

于 2012-01-07T01:02:25.197 回答
1

是的,在 ALTER TABLE 期间,所有读取和写入都被阻止。如果您的网站需要使用该表,请求将挂起。

尝试pt-online-schema-change。它允许读取和写入继续进行,同时它会在重组完成后捕获要针对更改的表重放的更改。

在你的开发服务器上仔细测试,这样你就知道它是如何工作的以及会发生什么。

于 2012-01-07T00:42:47.657 回答
0

它不会停止您的网站,但可能会使其引发错误。

当然,如果不查看应用程序的所有代码,就无法回答这个问题。

底线是,当有疑问时,安排一个维护窗口。

于 2012-01-07T00:41:28.153 回答
-3
  1. 使生产服务器指向生产数据库的开发数据库(或)镜像一段时间。
  2. 在生产中更改表
  3. 部署与生产数据库对话的代码(使用新属性)

PS:我觉得这是更安全且万无一失的方式(根据我的经验)。

于 2012-01-07T00:42:48.963 回答