一、简介
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&#x