当前位置: 首页 > news >正文

MySQL安全修改表结构、加索引:ON-Line-DDL工具有哪些

文章目录

  • 一、MySQL原生Online DDL
  • 二、pt-online-schema-change(pt-osc)
    • 1、简介
    • 2、基本原理
  • 三、gh-ost
    • 1、简介
    • 2、使用

一、MySQL原生Online DDL

从MySQL 5.6开始,官方引入了在线DDL机制,支持部分ALTER TABLE操作在不锁表或仅短暂锁表的情况下完成,如添加/删除列(某些情况下)、修改列属性、添加/删除索引、更改存储引擎等。其优点是无需额外部署工具,可控性强,兼容性好,对应用无侵入。缺点是并非所有DDL操作都支持完全不锁表,适用于中小表、对锁敏感度低的场景。

二、pt-online-schema-change(pt-osc)

1、简介

由Percona公司开发的开源工具,用于在不影响线上服务的前提下完成表结构变更。它通过创建临时表,利用触发器复制数据等方式,将原表数据复制到新表,最后替换原表,从而实现在线修改表结构。该工具完全避免锁表,适用于大表操作,还支持回滚机制,保障数据安全,但在高并发写入场景下可能存在性能问题。

官网:https://docs.percona.com/percona-toolkit/pt-online-schema-change.html

2、基本原理

1、创建新表:首先创建一个与原表结构相同的新表,表名一般以 _new 作为后缀。
2、修改新表:在新表上执行表结构变更操作。
3、创建触发器:在原表上创建三个触发器(DELETE、UPDATE、INSERT),以确保对原表的操作同步到新表。
4、复制数据:将原表的数据复制到新表。
5、替换表:将新表替换为原表。
6、更新外键:如果有外键约束,需要更新外键指向新表。
7、删除旧表:删除旧表和触发器

三、gh-ost

1、简介

由Github维护的MySQL online DDL工具。它同样使用了镜像表的形式,但放弃了使用低效的trigger,而是从binlog中提取需要的增量数据来保持镜像表与源表的数据一致性。整个Online DDL操作仅在最终rename源表与镜像表时会阻塞几秒钟的读写。gh-ost输出的信息、迁移数据的效率,以及支持的功能都比较优秀,且进程意外中断以后,可以新启动一个进程继续进行Online DDL,适用于对主库影响要求低、希望减少同步延迟的场景。

开源地址:https://github.com/github/gh-ost

2、使用

暂无

http://www.lryc.cn/news/591499.html

相关文章:

  • 数据产品结构:从数据接入到可视化的完整架构指南
  • 学习C++、QT---27(QT中实现记事本项目实现行列显示、优化保存文件的功能的讲解)
  • Spring Boot 参数校验:@Valid 与 @Validated
  • 关于vector中的erase的强调
  • Leetcode刷题营第二十八题:二叉树的前序遍历
  • Effective Python 条款7 用列表推导来取代map和filter
  • c++之 KMP 讲解
  • 网络原理 —— HTTP
  • 深入理解Collections.addAll方法
  • Python 离线安装 PyInstaller 的完整步骤(以python3.11.4-amd64.exe为例)
  • Trae IDE:打造完美Java开发环境的实战指南
  • 产品经理如何绘制服务蓝图(Service Blueprint)
  • 基于5G系统的打孔LDPC编码和均匀量化NMS译码算法matlab性能仿真
  • Oracle 成本优化器(CBO)与数据库统计信息:核心原理与实践
  • 线程(三) linux 同步
  • .NET Framework版本信息获取(ASP.NET探针),获取系统的.NET Framework版本
  • pycharm提交项目到github及问题解决
  • ubuntu基础搭建
  • 【Android代码】绘本翻页时通过AI识别,自动通过手机/pad朗读绘本
  • 基于单片机公交车报站系统/报站器
  • 分支和循环语句
  • Kotlin集合与空值
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • 学习 Flutter (四):玩安卓项目实战 - 中
  • 【LeetCode 热题 100】230. 二叉搜索树中第 K 小的元素——中序遍历
  • Java全栈面试实录:从电商支付到AIGC的深度技术挑战
  • HTML常用标签汇总(精简版)
  • Easy ARM2132
  • 测试学习之——Pytest Day3
  • 【git】使用教程