历史原因,现有的数据库好几个实例中,每一个库中的表都有 InnoDB,MyISAM 两个引擎存在。
1
onion83 2019-03-19 23:35:02 +08:00
无论基于什么理由,尽量都不要动旧数据吧,万一翻车呢:)
比较好的方法是新建立一个 innodb 的数据库,然后用 SELECT INTO new_table from old_table 的方法迁移数据,或者用 mysqldump 先导出再导入。至于实时更新数据等问题,就要看你的需求了,但是业务一定是受损的,还是停机操作吧。 最后还是提醒一下:备份!备份!备份! |
2
honeycomb 2019-03-19 23:56:38 +08:00 via Android 1
还有一个麻烦一些但可以在某些情况下不停机(比如同时运行多个业务实例,前端有负载均衡),并且可以保证安全(可以随时回滚)的办法:
1,建一个 InnoDB 的新表,新数据直接放新表。 2,查询的时候,新数据查新表,旧数据查旧表。 3,同时把旧表数据复制到新表 4,复制完成后,查旧数据的逻辑也改成使用新表(这部分的代码和 2 同时写好)。 5,这个时候可以删掉旧表了 |
3
wy315700 2019-03-19 23:57:55 +08:00 1
pt-online-schema-change
|