存储引擎和使用场景
innodb 在线修改表结构的问题
不支持的场景
主要是在线 DDL 的问题
- 加全文索引
- 加空间索引
- 删除主键
- 增加自增列
- 修改列类型
- 改表字符集
在线 DDL 的问题
- 部分语句不支持在线 DDL
- 长时间的 DDL 操作会引起严重的主从延迟
- 无法对 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 机制
- 写是使用锁