MySQL执行在线变更表结构,是MySQLDBA运维的一个重要日常,该文章讨论了如何对一个大表进行结构变更时保证数据库服务的稳定性。

1、首先看MySQL的onlineDDL.对字段的操作,官方文档中有如下说明

增加、删除及重排一个column时,虽然可以使用in place方法,使再执行onlineDDL时不会阻塞对表的更新。但是在集群(主从复制、组复制)中,该DDL的在其他节点的执行将会阻塞后续的事务,造成后续事务的延时。对二级索引的操作,官方文档中如下

在MySQL5.7中可以做到在增加二级索引(除了全文索引)是不阻塞当前节点的写入,但是与对column的操作相同在集群(主从复制、组复制)中,该DDL的在其他节点的执行将会阻塞后续的事务,造成事务的延时。对主键的操作

在MySQL5.7中对主键进操作是是否可以用in place方法,及是否可以并发执行DML如上,一般不会出现对主键增减的问题,因为建表时已经确定好主键。MySQL8.0已经可以做到秒及加列。

2、再看percona的开源工具pt-osc(pt-online-schema-change)工作原理

在原表中创建触发器,将执行pt-osc过程中的更改同步到中间表;

创建中间表,并更改中间表的表结构;

批量拷贝数据库到中间表;

将原表重命名,将中间表重名,将原表删除。使用过程产生死锁导致线上业务失败。

在频繁更新的表上做pt-osc可能产出大量死锁,所以执行pt-osc时尽量避免业务的高峰期,一方面可以避免死锁的产生,另一方面在执行pt-osc时会消耗较大的IO,避免对线上整体业务的影响。导致主从延时

该问题可以通过pt-osc的流控来控制。

pt-osc在进行数据拷贝时会给数据库上产生较大负载,一般建议在业务低估期执行。大量的数据拷贝可能导致集群(主从复制,组复制)中的其他节点延时。

1)对于主从复制模式下,pt-osc可以监控从节点延时,当延时超过某值时,暂停数据库拷贝,待延时降低后继续拷贝。

2)对于MGR架构情况下,增加sleep=0.3,chunk-time=0.2;及每次拷贝数据控制在0.2秒完成,在拷贝下一批数据前暂停0.3秒。通过这两个参数分别降低的拷贝数据的事务大小及writeset中已经过期的值大小,避免大事务及每60秒清理writeset时造成的事务阻塞。

mysql online ddl和pt_MySQL的onlineDDL及pt-osc相关推荐

  1. mysql online ddl和pt_MySQL变更之:Online DDL 和 PT-OSC 该选谁?

    参考: 在MySQL 5.6版本以前,最昂贵的数据库操作之一就是执行数据定义语言(DDL,例如CREATE,DROP,ALTER等)语句,特别是ALTER语句,因为在修改表时,MySQL会阻塞整个表的 ...

  2. oracle ddl会被什么阻塞,MySQL Online DDL与DML并发阻塞关系总结

    MySQL Online DDL与DML并发阻塞关系总结MySQL DDL操作执行的三种方式 1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与CO ...

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

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

  4. mysql怎么在海量数据上ddl_浅谈MySQL Online DDL(中)

    本文首发于个人微信公众号<andyqian>,期待你的关注! 前言 在上一篇文章中<浅谈MySQL Online DDL (上)>中,我们谈到了MySQL Online DDL ...

  5. MySQL Online DDL学习笔记

    MySQL online DDL的功能就是在对表就行DDL操作的同时也可以对表进行读写操作, 即对表的DDL操作不会影响该表上的事务.  该功能的优点: 改善繁忙生产环境的响应效率和可用性. 可以使用 ...

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

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

  7. MySQL的DDL、DML和DQL的基本语法

    定义:  SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一 种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统 ...

  8. mysql ddl导出_Navicat批量导出mysql的DDL语句

    工作中有的时候需要将某个库中的表.视图.函数.存储过程等创建语句导出,又不需要表中的数据.同时最好放在同一个文件里面,这样方便拷贝. 方法一:需要拷贝的创建语句条数不多,不至于让你拷到头脑发晕的地步, ...

  9. mysql ddl备份,MySQL系列-DDL语句

    MySQL系列-DDL语句 运维少年 运维少年 系列文章说明 MySQL系列文章包含了软件安装.具体使用.备份恢复等内容,主要用于记录个人的学习笔记,主要使用的MySQL版本为5.7.28,服务器系统 ...

最新文章

  1. RocketMQ NameServer网络通信架构(基于Netty)
  2. python if语句多个条件-Python中if有多个条件处理方法
  3. HTML 各种鼠标手势
  4. 【Nginx】错误: [emerg] “proxy_set_header“ directive is not allowed here in D:\sde\phpstudy_pro\...
  5. 阿里再开源!基于JAVA的模块化开发框架JarsLink
  6. windows7 安装IIS没有default web site 解决方法
  7. Python(23)-面向对象2-继承,多态
  8. 惠普z6计算机进不去桌面,HP Z6 桌面工作站 | HP® HK 惠普香港
  9. 怎么在Guitar Pro乐谱中加入哇音
  10. [BZOJ1934/Luogu2057][SHOI2007]Vote 善意的投票 题解
  11. vue里面下载配置使用zepto vue中怎样使用zepto
  12. 使用HTML制作简易求职表
  13. html5 连连看小游戏
  14. axure 倒计时_Axure倒计时效果
  15. Android实现一键开启自由窗口、分屏、画中画模式——画中画模式
  16. 统计正交码片(c++)
  17. 史上最全面、最详细的Cookie总结
  18. read函数---------详解
  19. python项目分析报告_Python---项目需求分析
  20. jmeter使用beanshell中字符串转换为long的实际操作

热门文章

  1. IOS之未解问题--关于IOS图像渲染CPU和GPU
  2. c++面向对象的编程
  3. C/C++:多个.cpp文件包括同一个.h头文件定义方法
  4. 命题思路或将转型,命题方向路在何方
  5. mysql主从复制简单配置
  6. 比特币现金诞生一周年,未来发展瞄上了IPFS技术
  7. angularjs学习第八天笔记(指令作用域研究)
  8. 调试Docker容器
  9. 选择排序-直接选择排序
  10. How to use tcpdump with examples