MySQL DDL Online ddl是什么意思( 二 )
![MySQL DDL Online ddl是什么意思](http://img.jiangsulong.com/220724/0K6313647-1.jpg)
文章插图
图片起源参考:https://blog.csdn.net/finalkof1983/article/details/88355314
MySQL官方虽然已经支撑了DDL的Online操作 , 但是 , 这个操作比拟有局限性 , 并不是所有的DDL语句都可以真正的Online的去履行 。有些DDL语句 , 虽然我们显示的履行要让其应用online的方法去履行 , 但是当MySQL真正的去履行的时候 , 如果它发明不能online的时候 , 会给出毛病提醒 , 让我们修正对应的显示参数去改为offline的方法去履行 。这里不同的DDL语句规模很广 , 例如:修正字段类型、增长主键、删除主键、增长索引、删除索引、更改索引名称、增长字段、删除字段、修正字段长度等等 。依据不同类型的DDL语句 , 参数ALGORITHM和LOCK的取值规模并不是都可以随便组合应用的 , 这个要视情形而定 , 具体场景具体剖析 。具体参考如下图片:
![MySQL DDL Online ddl是什么意思](http://img.jiangsulong.com/220724/0K6312343-2.jpg)
文章插图
图片起源参考:https://blog.csdn.net/finalkof1983/article/details/88355314
另外 , 在针对有主从架构的场景时 , 应用官方自带的这种DDL Online语句 , 即便是在master主节点可以online的去履行 , 但是会在从库上会履行同样的DDL语句期间 , 从库中对应的这个履行DDL语句的表会涌现DML语句被阻塞的情形 , 从而涌现主从延迟的现象 。大致进程如下:
- 在master节点上某个表履行DDL语句 , 此时对表的DML仍然可以支撑并行的履行 。
- 在这个DDL语句没有履行完成之前 , 这个操作是不会通过binlog同步到slave节点上去的 。只有当这个DDL语句在master节点履行完成后 , 才会同步到slave节点去履行 。
- 当slave开端履行从master同步过来的DDL的进程中 , 从master节点同步过来的 , 对该表的DML语句不能同时履行 , 须要期待slave上面的DDL语句履行完成后 , 才可以履行同步过来的DML语句 。
- 此时 , 在slave上就涌现了延迟的现象 。
pt-online-schema-change工具pt-online-schema-change是Percona公司供给的众多工具集中的一个 , 它是工具包Percona Toolkit里面的其中一个命令 。而这个工具箱的安装也比拟简略 , 有各种安装方法 。如果不想编译安装 , 可以下载一个编译好的二进制紧缩包 , 开箱即用 , 解压落后入bin目录既可以应用 。下载地址为:https://www.percona.com/downloads/percona-toolkit/LATEST/
pt-online-schema-change可以实现在线的DDL语句 。它的原理是基于触发器来实现在线更改表构造 。它的实现进程大概如下:
- 先创立一个临时表 , 这个临时表的表构造比原表的表构造不同之处就在于它已经运用了我们的DDL语句 。
- 把原表中的数据慢慢的导入到这个临时表中 。
- 在履行第2步导入操作的时候 , 如果仍然有对原表的DML语句 , 这些操作也要记载下来 , 然后同步到临时表中 。
- 在确保临时表中的数据和原表中的数据完整同步之后 , 用临时表调换原表 。
推荐阅读
- MySQL中MyISAM为什么比InnoDB查询快
- mysql数据库出现c乱码问题怎么解决?
- centos 7.9 安装配置mysql5.7
- mysqldump全库备份脚本
- mysql数据库怎么查询数据库是否存在?
- mysql数据库的最大连接数怎么查询?
- mysql数据库中的my.ini路径在哪里?
- 浅析MySQL恶意服务器读取文件原理
- 新一代HTAP数据库崛起,MySQL生态的最佳归宿?
- mysql中all用法和any的用法和内外连接,全外连接,联合查询,自连接