› 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 · Mar 19, 2019 · 5477 views
    This topic created in 2752 days ago, the information mentioned may be changed or developed.

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

    现在想统一表引擎为 innodb。

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

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

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

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

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

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

    @wy315700 #3
    好像是个利器。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2687 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:01 · PVG 11:01 · LAX 20:01 · JFK 23:01
    ♥ Do have faith in what you're doing.