fanne
V2EX  ›  MySQL

mysql 引擎混用怎么维护

By fanne at 2019 年 3 月 19 日 · 5460 次点击

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

现在想统一表引擎为 innodb。

  • 如果改表引擎,是否可行。最大的库有 150G 多吧,此库中有个表,单表 100G。
  • 如果直接 alter 改表引擎,会有什么的风险存在

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

4 条回复  •  2019-03-20 10:02:12 +08:00
onion83
   1
onion83  
   2019 年 3 月 19 日
无论基于什么理由,尽量都不要动旧数据吧,万一翻车呢:)

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

最后还是提醒一下:备份!备份!备份!
honeycomb
   2
honeycomb  
   2019 年 3 月 19 日 via Android   ❤️ 1
还有一个麻烦一些但可以在某些情况下不停机(比如同时运行多个业务实例,前端有负载均衡),并且可以保证安全(可以随时回滚)的办法:

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

@wy315700 #3
好像是个利器。
› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
© 2026 V2EX · 31ms · 3.9.8.5