RD自助DDL操作,其实这种操作开放给RD自助执行是非常危险的,即便是DBA在做大表操DDL的时候,都经常会出现一些状况,比如造成锁等待,连接打满,主从延迟等。
其实这部分只要用对工具,把特殊情况考虑到,也是可以做成服务开放出去的。
先来了解下目前在线DDL的几种方式以及优缺点
1, 通过InnoDB在线online功能
2, 通过pt-online-schema-change工具
https://blog.csdn.net/liuhanran/article/details/78470447?utm_source=blogxgwz0
第一种方式,InnoBD的online功能也只是支持一部分DDL操作,有很多的DDL是不支持online的,具体相关内容这里不展开。即便是能online的操作,也是有很多其他问题,二进制文件中的日志把修改操作序列化了,从库应用日志时会导致复制延迟,而且DDL还是不可中断的,要是在修改时把操作杀掉的话还需要更长的时间去回滚,甚至导致数据字典崩溃。在系统负载高时也不能限速或者暂停。这样的操作还有可能会耗尽系统资源。
对应第二种方式,我们使用pt-online-schema-change很多年了。但每次更数据量比较大的表的时候,都会担心会发生什么,都是因为被它伤害过的,哈哈。有一些操作只敢在非业务高峰期或晚上凌晨几点钟。所有现有的在线修改表定义工具都是用MySQL触发器来迁移数据的,因此本身就存在着一些问题。触发器这种方式的缺点具体不展开了,要了解详细可以自行查询相关内容。
下面介绍下我们平台低层使用的技术gh-ost
这东东是什么东西呢,(port一部分内容) go-ost是gitHub’s Online Schema Transmogrifier/Transfigurator/Transformer/Thingy的缩写,意思是GitHub的在线表定义转换器。它主要有以下特点:无触发器 轻量级 可暂停 动态可控 可审计 可测试 可靠。想要详细了解次工具,请自行查看相关资料
1), 任务提交页面
2) 提交任务,并验证任务
对于用户提交的alter操作进行任务验证是很有必要的,比如用户权限,SQL语法,一个表的操作多条sql是否合并成一条SQL,SQL是否符合审核规范,比如字段备注,索引长度,索引名字等。
这个就是SQL有问题导致的提交失败
这个是因为表没有主键提交失败
。。。。等等,更多情况不再列出。
3) 能正确提交的会生成任务列表
4) 进入任务id连接 可以做大部分任务的操作
主要有三种操作类型:执行任务, 临时暂停任务,取消任务(只要任务没完成都可以取消,对数据库没有太大影响) ,其中审核部分,后期会接入审核流系统。
5) 执行任务
点击执行后能在面板上看到很多的信息:
执行耗时:这条任务已经执行的时间。
剩余时间:预计还需要多长时间。
堆积状态:数据库压力比较大,生成的binlog比较多的时候,可能会出现应用处理binlog堆积,比如:1000/1000 此时任务会自动 暂停
执行状态:这里能看到大部分的实时状态信息,比如,正在拷贝数据,由于数据库压力大,或者延迟等原因任务暂停保护。失败,成功,任务取消等信息。
错误信息:如果任务执行的过程中发生错误,在这里会实时显示出来。
数据行进度:第一个数字是已经拷贝的行数,第二个数字是表的总行数。
百分比进度:进度条方式显示进度。
已经执行完成。
这条任务执行的时候有错误发生
可以查看错误信息,这个信息是说alter最后阶段rename之前获得锁的时候超时,这时候应该是表上有长事务造成的。
6) 取消或暂停任务
任务已暂停,并且对数据库基本没影响
运行的过程中随时暂停,这里是手动触发暂停,如果数据库压力threads_running ,延迟等原因 会自动暂停。
可能遇到的问题:
1) binlog产生过多出现堆积情况
当负载变高时,gh-ost无法跟上二进制日志处理 ,gh-ost的未来版本可以通过并行应用binlog事件来改善这个问题
2) 长事务造成的切表问题
被修改的表上如果有长事务存在,就造成ghost频繁的尝试加锁,这样间歇性的对后面查询造成影响。这里如果发现有这种锁频繁超时问题,就会自动设置成延迟切表,这样不会对线上造成大的影响。
3) 拷贝期间出现锁等待
执行状态显示正在拷贝数据,但那时进度条长时间没有变化,这种情况一般是等待行上面的锁释放,因为拷贝是当前读,
如果行上面有写锁的话会一直等待写锁释放,最终可能锁等待超时。不过这里不会对数据库造成坏的影响。
4)负载高自动暂停
如果数据库负载比较大,任务会自动暂停,以保护数据库的可用性。另一个场景是延迟
达到阈值的时候也会暂停拷贝。
权限控制,执行时间控制(高峰的时候禁止使用平台操作)等
https://help.aliyun.com/knowledge_detail/41733.html?spm=5176.13910061.0.0.51b86c65BCuowI&aly_as=vyj0PRmUb
https://www.cnblogs.com/gered/p/9132733.html
http://www.mamicode.com/info-detail-1716373.html
https://tech.meituan.com/2016/09/18/the-construction-of-database-automation-system.html
https://yq.aliyun.com/articles/222521