show table STATUS数据不准确

https://dev.mysql.com/doc/refman/8.0/en/show-table-status.html



https://www.copylian.com/technology/203.html



https://blog.csdn.net/weixin_39801613/article/details/113293950




http://www.04007.cn/article/402.html



https://blog.csdn.net/weixin_39740419/article/details/113435445



https://note.youdao.com/ynoteshare1/index.html?id=c9c51ef568a152b432ab76c39529de4d&type=note



gh-ost
基于触发器的 Online DDL 工具
介绍 gh-ost 之前,先来简单了解一下在这之前基于触发器的工具原理。考虑一下 Online DDL 实际上可以粗糙的分成几步:
根据原来的表结构执行 alter 语句,新建一个更新表结构之后的表,通常称为幽灵表。对用户不可见。
把原来表的已有数据 copy 到幽灵表。
在 copy 的过程中,会有新的数据过来,这些数据要同步到幽灵表,也就是 “Online” 的精髓。
copy 和同步完成后,锁住源表,交换表名,幽灵表替换源表。
删除源表(可选),完成 online DDL。
这其中比较重要的第三步,如何同步增量的数据。最开始办法就是使用触发器,在源表上增加几个触发器,例如当源表执行 INSERT,UPDATE,DELETE 语句,就把这些操作通过触发器同步到幽灵表上,这样在幽灵表上执行的语句和源表的语句就属于同一个事务,显然这样会影响主库的性能。
后面出现了异步的模式,使用触发器把对源表的操作保存到一个 Changelog 表中,不真正的去执行,专门有一个后台的线程从 Changelog 表读取数据应用到幽灵表上。这种方式一定程度上缓解了主库的压力,但是保存到 Changelog 表也同样是属于同一个事务中,对性能也有不小的影响。
在 gh-ost 的文档 中细数了触发器的不足之处,大致有以下几点:
Triggers, overhead: 触发器是用存储过程的实现的,就无法避免存储过程本身需要的开销。
Triggers, locks: 增大了同一个事务的执行步骤,更多的锁争抢。
Trigger based migration, no pause: 整个过程无法暂停,假如发现影响主库性能,停止 Online DDL,那么下次就需要从头来过。
Triggers, multiple migrations: 他们认为多个并行的操作是不安全的。
Trigger based migration, no reliable production test: 无法在生产环境做测试。
Trigger based migration, bound to server: 触发器和源操作还是在同一个事务空间。
Triggerless
从上面的描述可以看出,触发器的作用是源表和幽灵表之间的增量数据同步,gh-ost 放弃了触发器,使用 binlog 来同步。gh-ost 作为一个伪装的备库,可以从主库/备库上拉取 binlog,过滤之后重新应用到主库上去,相当于主库上的增量操作通过 binlog 又应用回主库本身,不过是应用在幽灵表上。引用一下官网的图:



gh-ost 首先连接到主库上,根据 alter 语句创建幽灵表,然后作为一个”备库“连接到其中一个真正的备库上,一边在主库上拷贝已有的数据到幽灵表,一边从备库上拉取增量数据的 binlog,然后不断的把 binlog 应用回主库。图中 cut-over 是最后一步,锁住主库的源表,等待 binlog 应用完毕,然后替换 gh-ost 表为源表。gh-ost 在执行中,会在原本的 binlog event 里面增加以下 hint 和心跳包,用来控制整个流程的进度,检测状态等。这种架构带来诸多好处,例如:
整个流程异步执行,对于源表的增量数据操作没有额外的开销,高峰期变更业务对性能影响小。
降低写压力,触发器操作都在一个事务内,gh-ost 应用 binlog 是另外一个连接在做。
可停止,binlog 有位点记录,如果变更过程发现主库性能受影响,可以立刻停止拉binlog,停止应用 binlog,稳定之后继续应用。
可测试,gh-ost 提供了测试功能,可以连接到一个备库上直接做 Online DDL,在备库上观察变更结果是否正确,再对主库操作,心里更有底。
并行操作,对于 gh-ost 来说就是多个对主库的连接。



https://juejin.cn/post/6854573213167386637



https://www.cnblogs.com/cchust/p/4639397.html



https://huangzhw.github.io/2018/09/20/mysql-online-ddl/



https://www.cnblogs.com/dbabd/p/10381942.html



Category mysql