我们必须将 MyISAM 表迁移到 InnoDB,但我们担心停机时间很长。在我们的数据库中,我们有 10 个 MyISAM 表,其中 2 个是最大的:~26GB 数据 + ~10GB 索引。
我的问题是:我可以在主服务器(带有原始引擎的表)和所有表都迁移到 InnoDB 的副本之间设置复制吗?然后副本将是我们的主数据库。
我阅读了一些关于将表从 MyISAM 迁移到 InnoDB 的文章(例如: http: //mysql.rjweb.org/doc.php/myisam2innodb或https://dev.mysql.com/doc/refman/5.7/en/converting -tables-to-innodb.html)并且需要额外的步骤(比如删除重复的索引和服务器配置更改)但是它会起作用吗?
如果副本服务器上没有表的副本,则无法启动复制。也就是说,Replication 不适用于启动转换,仅用于维护转换。
OTOH,如果您已经设置了复制并且 26GB 的表在副本上,您可以
ALTER TABLE .. ENGINE=InnoDB;
为副本上的每个表。同时,Replication 将继续向其发送更新和插入。(虽然,由于锁定而导致显着延迟。)最终,副本将全部为 InnoDB。然后您需要足够的停机时间来执行“故障转移”交换角色(主要与副本),大概是通过切换客户端连接。另一方面,如果您还没有 Replica,那么在快速转换方面您可能就不走运了。
我关于转换的旧技巧: http://mysql.rjweb.org/doc.php/myisam2innodb