在InnoDB 中,DDL 操作只需要处理好节点本身的状态即可,即在做DDL 之前,需要获取对应表的MDL 锁,并清空数据字典缓存。但在共享存储架构下,系统还需要将MDL 锁同步到只读节点,避免只读节点上的请求访问到正在做DDL 的表数据;在拿到只读节点的MDL 锁之后,先应用当前 MDL 锁之前的Redo Log,并清空只读节点的数据字典缓存。在DDL 操作执行过程中,读写节点会进行文件操作,但只读节点只需要更新 自己内存中的文件系统缓存(File System Cache),因为读写节点已经将文件操作在共享存储上执行完毕。最后在DDL 执行完毕之后,读写节点还会写一个释放MDL 锁的Redo Log。当只读节点解析到这种Redo Log 时,它会释放该表的MDL 锁。此时内存中的表信息更新完毕,该表可以提供正常的访问服务。
以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。