一、简介

gh-ost: github 提供的针对 MySQL 无触发器式在线架构迁移解决方案。

二、原理

目前的在线架构变更工具都使用了类似的方式:创建一个和源表一样的临时表,在临时表执行 DDL 语句,并慢慢的迁移老数据到临时表,同时传递源表 DML 变更 (INSERT, UPDATE, DELETE) 到临时表,最终使用临时表替换源表。

gh-ost 也使用了类似的方式,但它不同的地方在于使用了基于 row 的 binlog 方式捕获 DML 变更,并异步更新到临时表中。原理如下图所示:

gh-ost 可以直接连接到 MySQL master 服务器,但是官方建议连接到 replica 服务器(一般为 slave 服务器)上。

注:binlog 可用于主从复制(MySQL主从延迟现象及原理分析)、数据恢复,有三种格式:

  • row(默认):只记录数据行的变化。不需要记录上下文信息,但可能会产生大量日志,如 alter table 操作。
  • statement:只记录引起数据变更的 SQL 语句。日志量小,但需要记录数据上下文信息,同时有些函数在不同的环境下执行结果可能不一致。
  • mixed: 默认使用 statement 格式,在某些情况下会转换成 row 格式,如存在 UUID() 函数,修改了自增列等。

特性

通过这种 binlog 的方式迁移数据,gh-ost 可以更好地控制迁移过程,如真正的暂停、与 master 的写入负载解耦等。

问题

当对大表加字段时(如业务表几十上百G):

  1. 需要注意磁盘空间是否充足
  2. 由于binlog 是 row 格式,而每条数据从 original 表数据复制到 ghost 表,都相当于 dml 变更,因此会产生大量的 binlog 日志,注意从库延迟

三、其他工具

原理

目前已有的 MySQL 架构迁移工具:

  • pt-online-schema-change
  • Facebook OSC
  • LHM
  • oak-online-alter-table

都使用了触发器,通过触发器来传递源表 DML 变更,分为两种方式:

  • 同步:源表的所有 DML 变更同步更新到临时表中
  • 异步:源表的所有 DML 变更插入到一个 changelog 表中,再通过异步程序从 changelog 表取出 DML 信息,更新到临时表中

触发器式同步迁移原理:

触发器式异步迁移:

风险

使用触发器可以简化活跃表的数据迁移,但是也存在一些限制和风险,如触发器执行造成的额外资源开销、并发写入导致的锁竞争、无法真正暂停等。

参考文章:

GitHub’s gh-ost
gh-ost’s Triggerless design
Why gh-ost triggerless
Binary Logging Formats
Mixed Binary Logging Format
MySQL主从延迟现象及原理分析
MySQL InnoDB 修改表列Online DDL

[MySQL] 在线 DDL 工具 gh-ost 原理简介相关推荐

  1. MySQL在线DDL工具pt-osc

    2019独角兽企业重金招聘Python工程师标准>>> 导读: 上篇文章讲过MySQL原生的Online DDL还是有很多限制的,还是会遇到data meta lock的问题等诸多不 ...

  2. MySQL在线DDL gh-ost 使用说明

    https://my.oschina.net/u/3765527/blog/3037243 https://www.cnblogs.com/zhoujinyi/p/9187421.html delet ...

  3. MySQL在线备份与恢复工具 -- Xtrabackup

    1 Xtrabackup原理简介 xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品.  ...

  4. mysql gh ost 对比_GitHub开源MySQL Online DDL工具gh-ost参数解析

    gh-ost版本:1.0.28 -allow-master-master 允许gh-ost运行在双主复制架构中,一般与-assume-master-host参数一起使用. -allow-nullabl ...

  5. 阿里云RDS在线DDL工具gh-ost

    最近公司进行了阿里云迁移,将所有服务器迁移到阿里云后,在对rds进行ddl的时候,发现原来的pt工具无法正常使用,主要表现在连接数据库的时候等待,将原始表数据拷贝到中间表时缓慢,变更过程中一直提示连不 ...

  6. osc mysql_MySQL在线DDL工具pt-osc

    导读: 上篇文章讲过MySQL原生的Online DDL还是有很多限制的,还是会遇到data meta lock的问题等诸多不便,然后就有了我们今天的话题,通过pt-osc在线执行DDL. 一.pt- ...

  7. mysql主从复制的配置方法和原理简介

    1.介绍 MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能.就是一台或多台MysQL数据库(slave,即从库)从另一台MNySQL数据库(master,即主库) ...

  8. GitHub在线MySQL DDL工具gh-ost安装文档

    GitHub开源MySQL Online DDL工具gh-ost安装文档 查看GitHub开源的MySQL在线DDL工具gh-ost官方文档,以及google一圈都没有发现gh-ost的安装文档,于是 ...

  9. mysql 唯一性约束报错_怪异的MySQL Online DDL报错Duplicate entry

    今天线上执行Online DDL的时候发现一个奇怪的报错,觉得比较意义,遂整理如下.线上数据库版本:percona server 5.7.14 报错现场:每次执行的时候重复报错记录都不一样 mysql ...

最新文章

  1. 批量修改数据映射_Docker 数据卷操作「Docker 系列-6」
  2. 远程访问×××——Easy ×××
  3. 算法:字符串消除问题的数学证明
  4. spss练习数据_SPSS篇——如何在成千上百万个数据中标识重复个案
  5. suse安装php,SUSE下安装LAMP
  6. java - 菲波拉契数列 兔子个数
  7. Java 并发编程之同步工具类信号量 Semaphore
  8. 用PHP实现多级树型菜单
  9. 20天涨幅600%!深交所:天山生物或涉嫌新型股价操纵行为
  10. Mysql学习总结(2)——Mysql超详细Window安装教程
  11. AD的PCB文件无法保存问题
  12. VNPY量化交易(一)
  13. UG NX 10 坐标系
  14. 统计(statistic)(二分查找+离散化)
  15. 谈谈Scala的抽取器(Extractor)
  16. 用Java写一个水仙花数算法
  17. 腾讯云CVM云服务器1M宽带能干嘛?1M宽带支撑多少人在线?
  18. 海思官方SDK Hi3516EV200_SDK_V1.0.1.0的编译教程
  19. tomcat如何增大并发_tomcat最大并发连接数的修改方法
  20. MySQL:偏移量为 0x000000000ae000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 21(设备未就绪。)。

热门文章

  1. c语言消隐的作用是什么,【C语言程序设计最终版材料】
  2. Android与PC通过USB连接通信(一)
  3. windows 使用bat脚本文件,复制文件夹到另一个盘
  4. 想学怎么把截图的英文翻译成中文?这就教你翻译截图
  5. 从软件本质的角度看待软件危机
  6. 2022-1-13 向曾文正学修身之法
  7. php语法难看,PHP语法之令人困惑的strtotime
  8. 华为mate20 pro Android,华为mate20和mate20pro区别 华为Mate20和Mate20pro对比
  9. 【福利】2020年通信行业研究报告汇总下载(免费)
  10. css如何实现圆角边框