V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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
fanne
V2EX  ›  MySQL

mysql 引擎混用怎么维护

  •  
  •   fanne · 2019-03-19 20:57:07 +08:00 · 3964 次点击
    这是一个创建于 1836 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    现在想统一表引擎为 innodb。

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

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

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

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

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

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

    @wy315700 #3
    好像是个利器。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5588 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:39 · PVG 09:39 · LAX 18:39 · JFK 21:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.