mysql 引擎混用怎么维护

2019-03-19 20:57:07 +08:00
 fanne

历史原因,现有的数据库好几个实例中,每一个库中的表都有 InnoDB,MyISAM 两个引擎存在。

现在想统一表引擎为 innodb。

有哪位直接线上改表引擎的,有经验的,传授一下

3992 次点击
所在节点    MySQL
4 条回复
onion83
2019-03-19 23:35:02 +08:00
无论基于什么理由,尽量都不要动旧数据吧,万一翻车呢:)

比较好的方法是新建立一个 innodb 的数据库,然后用 SELECT INTO new_table from old_table 的方法迁移数据,或者用 mysqldump 先导出再导入。至于实时更新数据等问题,就要看你的需求了,但是业务一定是受损的,还是停机操作吧。

最后还是提醒一下:备份!备份!备份!
honeycomb
2019-03-19 23:56:38 +08:00
还有一个麻烦一些但可以在某些情况下不停机(比如同时运行多个业务实例,前端有负载均衡),并且可以保证安全(可以随时回滚)的办法:

1,建一个 InnoDB 的新表,新数据直接放新表。
2,查询的时候,新数据查新表,旧数据查旧表。
3,同时把旧表数据复制到新表
4,复制完成后,查旧数据的逻辑也改成使用新表(这部分的代码和 2 同时写好)。
5,这个时候可以删掉旧表了
wy315700
2019-03-19 23:57:55 +08:00
pt-online-schema-change
fanne
2019-03-20 10:02:12 +08:00
@onion83 #1
@honeycomb #2
多谢二位思路,我这边在研究研究。

@wy315700 #3
好像是个利器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/546344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX