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语句执行的过程,可能会持续几十秒、甚至几分钟,此时的这个过程不会像操作小表那么快 。


为什么要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), ALGORI百思特网THM=INPLACE, LOCK=DEFAULT;alter table t add column col varchar(32), ALGORITHM=INPLACE, LOCK=EXCLUSIVE;其中的ALGORITHM=INPLACE, LOCK=NONE是关键的地方,这里需要分别为ALGORITHM和LOCK这两个参数指定值 。