在 MySQL MASTER MASTER 场景中使用 InnoDB
在一个实例上删除索引时,另一个实例上的同一个表是否可用?
活动顺序是怎样的?我假设以下顺序:
- 在第一个实例上删除索引
- 添加到二进制日志
- 在第二个实例上删除索引
任何人都可以确认吗?
在 MySQL MASTER MASTER 场景中使用 InnoDB
在一个实例上删除索引时,另一个实例上的同一个表是否可用?
活动顺序是怎样的?我假设以下顺序:
任何人都可以确认吗?
在 MySQL MASTER MASTER 场景中使用 InnoDB
据我所知,这样的事情是不可能的。您需要使用 NDB,或者处于多主从环境中,自动递增字段配置为递增 1/2/3/更多。所以假设后者。(注意:如果您知道基于 InnoDB 的解决方案,请分享。)
在一个实例上删除索引时,另一个实例上的同一个表是否可用?
删除索引仅意味着您的索引将不可用。不是桌子。它将被写入(并传播)到二进制日志并开始。
我相信会发生以下情况:
DROP INDEX
(真正运行 an ALTER TABLE ... DROP INDEX
)在主服务器上运行这意味着在第一台(主)机器上成功完成ALTER TABLE
之前,另一台机器上的 不会启动。ALTER TABLE
当ALTER TABLE
在任一机器上运行时,该表将在一段时间内可读,然后既不可读/不可写,因为 MySQL 首先在内部创建表的副本,然后应用更改。
来自http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
在大多数情况下,ALTER TABLE 通过制作原始表的临时副本来工作。对副本进行更改,然后删除原始表并重命名新表。在执行 ALTER TABLE 时,其他会话可以读取原始表。对表的更新和写入会停止,直到新表准备好,然后自动重定向到新表,而不会出现任何失败的更新。在新表的数据库目录中创建临时表。如果 ALTER TABLE 将表重命名为不同的数据库,这可能与原始表的数据库目录不同。