签到成功

知道了

CNDBA社区CNDBA社区

mysql online ddl 工具(gh-ost/pt-osc)对比说明

2024-04-24 16:24 55 0 转载 MySQL
作者: dave

注:本文由大模型生成http://www.cndba.cn/dave/article/131529http://www.cndba.cn/dave/article/131529

http://www.cndba.cn/dave/article/131529

1 gh-ost 原理

gh-ost 是一款 MySQL 的在线 DDL(数据定义语言)工具,其原理基于镜像表的方式实现无阻塞的表结构调整。具体原理和工作流程如下:http://www.cndba.cn/dave/article/131529http://www.cndba.cn/dave/article/131529

  1. 创建镜像表和心跳表:gh-ost 在开始进行表结构变更时,首先会在数据库中创建一个与原表结构相同的镜像表(通常后缀为 _gho),以及一个用于记录操作进度的心跳表(通常后缀为 _ghc)。
  2. 修改镜像表结构:用户在镜像表上执行期望的 ALTER 操作,这不会影响正在服务的原表。
  3. 增量复制数据:gh-ost 使用 MySQL 的二进制日志来捕获原表的数据变化。它会读取这些日志事件并将相应的数据变更异步应用到镜像表上,以此保持镜像表与原表的数据一致性。这个过程中不使用效率较低的触发器,而是直接利用二进制日志流来同步数据。
  4. 表切换:一旦镜像表中的数据更新完成并且与原表保持同步,gh-ost 会将原表重命名为镜像表,这个过程在大多数情况下非常快速,只会阻塞读写几秒钟时间。
  5. 错误处理和恢复:如果在数据迁移过程中出现任何问题,gh-ost 能够提供机制来暂停或者恢复数据迁移过程,确保数据一致性和完整性。
  6. 资源控制:gh-ost 可以独立于数据库对外提供服务的压力,通过自身控制数据迁移的速度,避免对主业务造成影响。
  7. 灵活性:gh-ost 支持动态调整参数,比如在需要的时候可以暂停和恢复数据迁移,也可以根据需要调整迁移速度。

总的来说,gh-ost 提供了一种相对高效且风险较低的在线表结构调整方案,尤其适用于大型生产环境中对表结构进行更改而不影响正常服务的场景。

2 pt-osc 原理

pt-osc 是 Percona 提供的一种在线表结构变更工具,它旨在执行 DDL(数据定义语言)操作而不会导致服务中断或锁表。其工作原理如下:http://www.cndba.cn/dave/article/131529

  1. 创建新表:pt-osc 首先创建一个空的新表,该表结构与原始表相同。
  2. 应用 DDL:因为新表是空的,所以可以快速地在上面执行所需的 ALTER TABLE 语句来更改表结构。
  3. 设置触发器:在原始表上创建三个触发器,分别对应 INSERT、UPDATE 和 DELETE 操作。这些触发器确保在数据迁移过程中对原始表的所有更改都能实时复制到新表中。
  4. 拷贝数据:pt-osc 将原始表中的数据以小块的形式复制到新表中。这个过程中,由于设置了触发器,因此任何新的DML(数据操作语言)操作都会即时反映在新表上。
  5. 表替换:一旦所有数据成功迁移到新表,并且新表的数据同步是最新的,pt-osc 会将原始表重命名为一个临时名称,然后将新表重命名为原始表的名称。最后,可以选择删除旧的临时表。

此外,pt-osc 还有一些限制条件,比如源表不能有已经存在的触发器等。

总的来说,pt-osc 通过上述机制实现了在不阻塞用户查询的情况下更改表结构,这对于要求高可用性的生产环境来说非常有用。http://www.cndba.cn/dave/article/131529http://www.cndba.cn/dave/article/131529

3 gh-ost 和 pt-osc 对比

在选择 MySQL 在线表结构调整工具时,没有绝对的“推荐使用”某一个工具的说法,因为每个工具都有其适用场景和优势。但基于功能、稳定性和性能的考虑,gh-ost 通常被认为是一个更现代且灵活的工具。以下是具体分析:

  1. 实现机制
  • gh-ost 通过读取 MySQL 的二进制日志(binlog)来复制数据,不使用触发器,这可能减少开销并提高处理速度。
  • pt-osc 则依赖于在原表上创建触发器来保持新表的数据同步,这种方法在某些场景下可能会引入额外的性能开销。
  1. 性能表现
  • 在高并发写操作的场景下,gh-ost 的性能可能会不如 pt-osc。这是因为 gh-ost 依赖 binlog 格式,而 pt-osc 使用触发器机制。
  • 然而,gh-ost 由于不使用触发器,通常有更低的性能开销,并且在大多数情况下工作得更快。
  1. 灵活性和安全性
  • gh-ost 提供了更多的灵活性,例如允许用户根据实际情况动态调整迁移速度等参数。
  • 在安全性方面,gh-ost 的做法通常被认为更为干净,因为它避免了使用触发器可能带来的复杂性和风险。

综上所述,虽然两者各有优势,但在选择时应考虑实际的业务需求、表结构复杂度、服务器性能等因素。如果需要更高的灵活性和安全性,gh-ost 可能是更好的选择;如果对性能有极高要求,特别是在高并发写入的环境中,可能需要考虑使用 pt-osc。

http://www.cndba.cn/dave/article/131529
http://www.cndba.cn/dave/article/131529

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2237
    原创
  • 3
    翻译
  • 546
    转载
  • 186
    评论
  • 访问:6598494次
  • 积分:4242
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ