DDL Online是什么?
为什么在线?
DDL联机的方法
官方自有DDL
pt-在线模式更改工具
Gh-ost工具
摘要
在线DDL:在线执行DDL语句,即在线修改表结构。Online是指在DDL语句执行过程中,表仍然可以不中断地提供正常的读写服务。
这就像在空给飞机加油而不降落的操作。
你可能觉得我快速执行一个DDL语句,不会导致表正常读写吧?那是因为你操作的表是数据量小的表,或者不是经常被访问的业务表。对于这些表,DDL语句确实很快,不会对业务产生很大影响。但是如果在一个几百万甚至几千万的大表上修改DDL语句,这个DDL语句的执行过程可能会持续几十秒甚至几分钟,这个时候的进程不会像操作一个小表那么快。
在生产环境中,我们不可避免地会遇到法硕考试科目表结构的修改。此时,在线表正在为后端请求访问提供各种服务。如果此时直接改变表结构,后端SQL请求可能会被阻塞,无法正常访问,导致服务异常或不可用。因此,我们应该特别注意在线表上的DDL操作。选择正确的方式和时间去做,尽量避免这些问题。
那么为什么向表中添加一个字段会导致表被锁定呢?
当我们向一个表中添加字段时,需要获取这个表的MDL元数据锁(写锁也叫X锁,读锁也叫S锁)。只有获取了这个MDL的X锁之后,才能修改这个表的结构,否则就会被阻塞。
到目前为止,MySQL中DDL Online的方式主要有以下几种。
MySQL的官方DDL在线功能
Percona提供的Percona工具包
Github开源gh-ost工具
主从切换模式
脸书证券委员会
LHM
下面就这些方式逐一做个总结吧。
MySQL以后的版本已经支持DDL在线操作。使用时,在我们的DD江西交通职业学院L语句中显示了指定关键字算法和锁的参数值。例子如下:
/*推荐该参数组合*/altertabletaddcolumncolvarchar(32),ALGORITHM=INPLACE,LOCK=NONE;altertabletaddc佳人olumncolvarchar(32),ALGORITHM=INPLACE,LOCK=SHARED;altertabletaddcolumncolvarchar(32),ALGORITHM=INPLACE,LOCK=DEFAULT;altertabletaddcolumncolvarchar(32),ALGORITHM=INPLACE,LOCK=EXCLUSIVE;
ALGORITHM=INPLACE,LOCK=NON-jiawenshe百科e是重点,这里需要分别为ALGORITHM和LOCK两个参数指定值。
算法该参数的值可以是就地、复制和默认。原地:其原理是基于原表直接操作DDL,此时可以支持DML操作。COPY:其原理是复制一个与原表结构相同的表,然后基于这个新复制的表进行DDL操作。然后用这个复制的新表替换原来的表。在DDL执行期间,原始表不支持DML操作,因为数据已被复制到新表中。如果仍然在原始表中执行DML操作,这些操作将不会与复制的新表同步。默认值:默认值。根据DDL语句的类型,会自动选择就地或复制选项。如果可以使用INPLACE,则不使用COPY。注意:这个复制操作要求磁盘的空空间足够,因为它会复制一个与原表相同的表,会再次占用与原表相同的磁盘空空间,同时会增加IO的负载。所以一般情况下,我们用INPLACE作为算法参数的值,只有在某些DDL语句不支持ALGORITHM=INPLACE参数时,才选择ALGORITHM=COPY这个选项。
锁定参数的取值范围可以是无、共享、默认和独占。无:表示没有锁定。在DDL语句执行过程中,表仍然可以执行lect和DML操作,这正是我们DDL Online真正想实现的。共享:可以执行lect操作,但不能执行DML操作。默认:根据不同的DDL语句,采用所需的最小锁。EXCLUSIVE:在DDL语句执行期间,不能执行lect操作,也不能执行DM文佳百科全书鸡蛋壳画L操作。整个表完全无法读取并被锁定。
MySQL自带的DDL Online的参数概要如下:
图片参考:https://blog.csdn.net/finalkof1983/article/details/88355314
虽然MySQL已经正式支持DDL的在线操作,但是这种操作是有限制的,并不是所有的DDL语句都能真正在线执行。有些DDL语句,虽然我们显示应该在线执行,但是当MySQL实际执行的时候,如果发现无法在线,就会给出错误提示,让我们修改相应的显示参数离线执行。这里有很多不同的DDL语句,比如修改字段类型、添加主键、删除主键、添加索引、删除索引、更改索引名、添加字段、删除字段、修改字段长度等。根据不同类型的DDL语句,参数ALGORITHM和LOCK的范围不能任意组合。这个要看情况,具体场景分析。详情参考以下图片:
图片参考:https://blog.csdn.net/finalkof1983/article/details/88355314
另外,对于主从架构的场景使用官方DDL Online语句时,即使主节点可以在线执行,在从数据库中也会执行相同的DDL语句,在从数据库中执行DDL语句的对送给你真诚的祝福应表中会阻塞DML语句,造成主从延迟。一般流程如下:
在主节点的表上执行DDL语句。此时,表的DML仍然可以支持并行执行。
在执行该DDL语句之前,该操作不会通过binlog同步到从节点。DDL语句只有在主节点执行时,才会同步到从节点执行。
从节点开始执行从主节点同步的DDL时,从主节点同步的DML语句不能同时执行,同步的DML语句只能在从节点上的DDL语句完成后执行。
在这一点上,从站有一个延迟。
所以官方在线的DDL方法有一定的局限性。基本上我们不用这种方法。而是使用第三方工具实现表结构的在线修改。
Pt-online-schema-change是Percona提供的众多工具之一,是Percona Toolkit中的命令之一。这个工具箱的安装也比较简单,有多种安装方式。如果不想编译安装,可以下载编译好的二进制压缩包,开箱即用。解压后就可以进入bin目录使用了。下载地址:/d/file/titlepic/downloads style="text-align: center">
本文发布于:2023-04-18 00:00:35,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ddebd11acf6dc1e8de5fb7025c150857.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:ddl是什么意思(MySQL DDL Online).doc
本文 PDF 下载地址:ddl是什么意思(MySQL DDL Online).pdf
留言与评论(共有 0 条评论) |