存储引擎和使用场景

innodb 在线修改表结构的问题

不支持的场景

主要是在线 DDL 的问题

  1. 加全文索引
  2. 加空间索引
  3. 删除主键
  4. 增加自增列
  5. 修改列类型
  6. 改表字符集

在线 DDL 的问题

  1. 部分语句不支持在线 DDL
  2. 长时间的 DDL 操作会引起严重的主从延迟
  3. 无法对 DDL 操作进行资源限制

如何更加安全的在线修改表结构

  • 使用 percona-tools 的 pt-online-schema-change
    • 会生成一张和原表相同的、DDL 过的新表
    • 复制原表数据到新表
    • 重命名两张表
      • 只有在重命名的时候才会进行搜表

pt-online-schema-change [OPTIONS,] \ D=, t=, u=, p=, ,h=, P=

  • --help 查看帮助

如何实现事务

  • A
    • undo log: 记录数据修改前的状态
  • C
    • redo log: 记录数据修改后的状态
  • I
    • mvcc 和 锁
  • D
    • undo log 和 redo log

读操作是否会堵塞写操作

  • 不会,读是基于 readview 的 mvvc 机制
  • 写是使用锁