生产数据库上的MySql ALTER TABLE - 会有任何问题吗?

12

我有大约100个数据库(所有的结构都相同,只是在不同的服务器上),每个数据库有大约十几个表。大多数表很小(假设小于100MB)。偶尔会出现一些表很大(比如说4GB +)的情况。

我需要在每个数据库中的几乎所有表上运行一系列ALTER TABLE命令。主要是添加一些行到结构中,但也有一些更改,比如将一个行从varchar更改为tinytext(反之亦然)。还要添加一些新索引(但索引新行而不是现有行,因此认为这不是什么大问题)。

我想知道这样做是多么安全,是否有任何最佳实践可供参考。

首先,是否存在意外破坏或删除表中数据的可能性?我认为不会,但需要确定。

其次,我推测对于较大的表(4GB+),这可能需要数分钟到数小时的时间处理?

关于在生产数据库上执行ALTER TABLE命令的任何信息和建议我都有兴趣了解。

如果有价值的话,我计划主要通过PHPMYADMIN发出命令。

谢谢 -


好问题,很想看到这个问题的答案 - 我最初的猜测是不会花太长时间,因为我认为如果你修改一个表,MySQL不必编辑每一行 - 不过我不确定,期待更有经验的人来解决这个问题 :) - suitedupgeek
2个回答

5

首先,在进行任何更改之前,请备份。 你有两种方法可以做到这一点:mysqldump 备份所有内容或者复制你的mysql数据文件夹。

其次,你可能需要使用命令行中的 mysql。PHPMyAdmin很可能会超时。大多数PHP服务器的超时时间少于10分钟。或者你意外关闭了浏览器。


1
备份大约100个数据库,表大小在100MB到4GB+之间,这可能值得另一个问题 :-) - ziya
有关锁定行的任何可能问题吗? - Jorre

0

这是我的建议。

  1. 您可以进行应用程序故障转移(确保所有数据库上没有连接)。

  2. 您可以使用“创建索引语句”创建索引,不要使用“alter table add index语句”。

  3. 将所有操作都使用脚本完成(将所有语句保存在文件中并从源代码运行)。

  4. 看起来表格大小非常小,所以不会带来任何麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接