3

如何修改每秒插入数百条记录的 MySQL 表,而不会出现任何停机/丢失数据或错误。

例如:添加一个新字段

谢谢

4

5 回答 5

0

直觉告诉你应该避免修改表格。另一种方法是将您的列添加到新表并链接到原始表以保持引用完整性,因此原始表保持不变。

另一种相当典型的方法是使用添加的列创建一个新表,将其与旧表交换,然后将数据添加回新表。虽然不是一个很好的解决方案。

MySQL 大师可能会不同意我的观点。

于 2012-06-04T20:46:38.207 回答
0

好吧,如果只插入我认为最好的方法是:

CREATE TABLE the_table_copy LIKE the_table;
ALTER TABLE the_table_copy ADD new_field VARCHAR(60);
RENAME TABLE the_table TO the_table_backup;
RENAME TABLE the_table_copy TO the_table;

但首先复制它并在足够快的情况下尝试复制。然后在真实的生活中做到这一点!:)

于 2012-06-04T20:56:03.573 回答
0

好吧,我会锁定表格,添加字段,解锁表格。然后插入会有一点延迟,但我想这不会太麻烦。

于 2012-06-04T20:58:16.007 回答
0

当您说“添加字段”时,您是在创建新列,还是只是在更新列中的值?两者是完全不同的东西。如果您只是更新一列,请更改您的数据模型以支持同一表中同一行的多个版本,并在表的末尾继续添加新行。这为您提供了最佳的读写并发性。

除此之外,您可以查看“Handler Socket”方法。 http://yoshinorimatsunobu.blogspot.com/search/label/handlersocket

于 2012-06-04T20:58:54.490 回答
0

如果您只需要添加一列,则没有理由需要停机。该表将在 ALTER TABLE 语句的持续时间内被锁定(毫秒)。在此期间提交的任何 DML 都必须等待,因此可能会短暂影响性能,但不应导致任何异常,除非某处的代码明确检查锁。

于 2012-06-04T20:59:42.457 回答