MySQL DDL Online ddl是什么意思

什么是DDLOnline为什么要OnlineDDLOnline的办法官方自带DDLOnlinept-online-schema-change工具gh-ost工具总结什么是DDLOnlineDDLOnline:在线履行DDL语句 , 也就是在线修正表构造 。所谓在线的意思就是保证在履行DDL语句的进程中 , 表

  • 什么是DDL Online
  • 为什么要Online
  • DDL Online的办法
    • 官方自带DDL
    • Onlinept-online-schema-change工具
    • gh-ost工具
  • 总结
什么是DDL OnlineDDL Online:在线履行DDL语句 , 也就是在线修正表构造 。所谓在线的意思就是保证在履行DDL语句的进程中 , 表仍然可以供给正常的读写服务 , 不会中止 。
这就像飞机在不下降的情形下 , 在空中给飞机加油的操作 。
MySQL DDL Online ddl是什么意思

文章插图


你可能会想我履行一个DDL语句很快的呀 , 不会导致表不能正常读写吧?那是因为你操作的表是一个数据量比拟小的表 , 或者不是一个被频繁拜访的业务表 , 对于这些表 , 履行DDL语句确切很快 , 不会对业务造成很大的影响 。但是 , 你如果对一个几百万、甚至上千万的大表进行DDL语句的修正 , 这个DDL语句履行的进程 , 可能会连续几十秒、甚至几分钟 , 此时的这个进程不会像操作小表那么快 。
【MySQL DDL Online ddl是什么意思】

为什么要Online我们在生产环境中 , 难免要遇到对表构造的修正 。而此时线上的表正在为后端供给各种要求拜访的服务 , 如果此时我们直接进行对表构造的更改 , 可能导致后端的SQL要求被阻塞 , 不能正常拜访 , 进而导致服务异常或不可用 。所以 , 在我们对在线的表进行DDL操作的时候 , 要格外的注意 。要选择适合的方法、适合的时光进行 , 尽量避免这些问题的产生 。
那么为什么增长给表增长一个字段会导致锁表呢?
当我们对表增长字段的时候 , 我们就要获取这个表的MDL元数据锁(meta data lock)写锁(写锁又称为X锁 , 读锁资源网又称为S锁) , 只有获取的这个MDL的X锁之后 , 我们才可以对这个表的构造进行修正 , 否则不能修正会被阻塞 。


DDL Online的办法目前为止 , MySQL的DDL Online的方法重要有以下几种 。
  • MySQL官方自带的DDL Online功效
  • percona供给的Percona Toolkit
  • Github开源的gh-ost工具
  • 主从切换的方法
  • Facebook的OSC
  • LHM
下面我们分离针对其中的几种方法来一一归纳总结一下 。


官方自带DDL OnlineMySQL从5.6之后的版本已经支撑了DDL的Online操作 。在应用的时候 , 就是在我们的DDL语句中 , 显示去指定症结字ALGORITHM和LOCK的参数值 。示例如下:


/*推举该参数组合*/alter table t add column col varchar(32), ALGORITHM=INPLACE, LOCK=NONE;alter table t add column col varchar(32), ALGORITHM=INPLACE, LOCK=SHARED;alter table t add column col varchar(32), ALGORITHM=INPLACE, LOCK=DEFAULT;alter table t add column col varchar(32), ALGORITHM=INPLACE, LOCK=EXCLUSIVE;其中的ALGORITHM=INPLACE, LOCK=NONE是症结的处所 , 这里须要分离为ALGORITHM和LOCK这两个参数指定值 。