原文:

这里跟大伙儿详细介绍一套做 DB migration 的好产品 pt-online-schema-change,它是能够 让 DBA 省时省心血的专用工具,他可以用简易的命令让修改资料表结构时不锁表(可载入)与贴近零 downtime 的好货。

在开发设计一套应用程序时,经常会依据不一样的要求对信息库构造进行变更,对 MySQL 来讲也是让人头疼,由于 MySQL 在修改资料表结构时候将材料表锁定,这会让伺服驱动器没法一切正常服务项目从而导致使用人感受不佳,但假如你的材料表又恰好是大中型材料表更会让锁住時间变长,因此一般的应用程序乃至是商业银行都是挑选在深夜开展改动,尽量地让 downtime 時间绕开顶峰时间段。

由于此前我全是应用 SQL Server 因此沒有遇过这个问题,以便检测我都请盆友帮我还在贴近 1T 的材料表里加个容许 Null 的栏位,轻轻地鬆鬆一瞬间就做完了都没有 Lock 太长的难题,难道说这就是 M$ 有收管理费的成果?尽管 MySQL 5.6 刚开始以便防止锁表,提升了这些方面的作用让锁表变为可读不能写,但这应用感受還是很差啊...

但是即然决定要用 MySQL 了那也没法,我还在找降低关机時间的解决方法时恰巧见到这款 tool,他可以用简易的命令让修改资料表结构时不锁表(可载入)与贴近零 downtime ... 我觉得是我必须的吗 !

pt-online-schema-change 的运行步骤以下:

查验外地人键是不是存有,做相对设定的解决。

增加一张新的材料表,其构造与来源于材料表完全一致

命名规范:_{source_table_name}_new

依据 ALTER 英语的语法改动新材料表结构

在旧材料表上增加 INSERT, UPDATE, DELETE 触发器原理,其目地为同歩新材料至新材料表

将旧材料表的材料複製至新材料表

将新材料表添加外地人键有关设置

将二张材料表的姓名做互换,并将原旧材料表名字为 old 的后缀名,改动方法为原子操作(Atomic)以降低半残情况。

命名规范:{source_table_name}_old

RENAME TABLE `exfast`.`tb_test` TO `exfast`.`_tb_test_old`, `exfast`.`_tb_test_new` TO `exfast`.`tb_test`

以便实验这里我準备了一张材料表其构造以下:

然后我想在这个材料表增加一个 age 的栏位,其命令为:

pt-online-schema-change \

--execute \

--progress=time,5 \

--print \

--alter-foreign-keys-method=rebuild_constraints \

--alter="ADD COLUMN age TINYINT" \

D=exfast,t=tb_test,h=172.17.0.2,P=3306,u=root,p=pass

不难看出这幺一小段简易的命令这一 tool 就帮大家完成了不便的 7 个流程确实是太佛心了吧!

这里非常注释 --alter-foreign-keys-method 这一主要参数,这一主要参数现有三个值能够 设置

rebuild_constraints

会先将旧 table 的外地人键 Constraints 删掉再加上至新表中,假如材料表非常大得话会导致长期堵塞,但也是最安全性的方式 。

drop_swap

实行 FOREIGN_KEY_CHECKS = 0 严禁外地人键 Constraints,先删掉原材料表再重新命名新材料表。这类方法迅速可是有风险性:

2.1. 在删掉原材料表和重新命名新材料表的短期内内,材料表有不会有的程序会抛不正确。

2.2. 假如在重命名的流程出現不正确无法复原。由于原表早已被删掉。

none

相近 drop_swap 的处理方法,可是它不删掉原材料表,而且外地人键 Constraints 会根据重命名转至老材料表上边。

参考文献:

mysql pt online_[MySQL] 材料表结构转移的好助手 pt-online-schema-change相关推荐

  1. MySQL导入导出数据和结构

    1. mysql导出数据和结构 使用mysqldump命令 1.1 导出全库 连带数据 mysqldump -u root -p app_test > app_test.sql 1.2 导出指定 ...

  2. MySQL在创建相同表结构时as和like 使用的区别

    1.MySQL的复制相同表结构方法: 1)create table table_name as select * from table1 where 1=2 (或者limit  0): 2) crea ...

  3. centos把mysql移到数据盘_Centos转移Mysql的数据位置

    首先,假设我们需要把Mysql的数据存储位置转到到  /data 下面 第一步: service mysqld stop 第二步: ### 备份原来的 mysql cp -a /var/lib/mys ...

  4. mysql case break_按月转移日志表中日志时,mysql总是报‘MySQL server has gone away’这样的错!...

    我有一段清除数据库日志的脚用来按月清除数据库中的日志文件然后再把它们按月分表存储,脚本平时运行正常但是每到月初一定会报一次'MySQL server has gone away'这样的错,不知道为什么 ...

  5. MySQL 高级 - 存储过程 - 语法 - case结构

    MySQL 高级 - 存储过程 - 语法 - case结构 -- 给定一个月份, 然后计算出所在的季度 create procedure pro_test7(mon int) begindeclare ...

  6. mysql数据类型查询命令_Linux命令:MySQL系列之三--mysql数据类型及SQL结构化查询语句使用...

    MySQL 存储引擎,也被称为表类型: MyISAM表:无事务处理功能,支持表锁 .frm:表结构定义文件 .MYD:表数据文件 .MYI:表索引文件 InnoDB表:支持事务处理功能,支持行锁 .f ...

  7. 从Mysql数据库中导入导出表结构

    1.从Mysql数据库中导入sql表 很简单,只需要一个命令即可搞定: [root@localhost ~]# mysql -uroot -piweb_xxx_mysql iweb < modi ...

  8. mysql中如何查看表结构

    1.登陆mysql 命令: mysql -uroot -p 2.此处以mysql数据库的func表为例 查看表结构的方法1 ---命令: desc func; --方法2 命令: describe f ...

  9. Mysql——》查看数据库表结构

    版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者. https://blog.csdn.net/weixin_43453386/article/detai ...

最新文章

  1. 简析平衡树(三)——浅谈Splay
  2. Firefox 与 IE 已死?Chrome 一统天下!
  3. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
  4. Redis 入门笔记
  5. gpio模拟pwm_模拟智能台灯
  6. viewport实现html页面动态缩放/meta viewport/viewport
  7. ie9 css过大,CSS 3后台大小不适用于IE9(CSS 3 background-size not working on IE9)
  8. asp.net学习之扩展GridView
  9. 大型双标现场?摩托车举报特斯拉逆行反被罚
  10. Linear Color Space 渲染时几点注意
  11. 国行ps4服务器维护,不能登录其地区的PSN代表什么
  12. java 枚举放那个包,java枚举,包装类,math使用
  13. Python 轻松操作Excel,实现自动化办公
  14. 多个pdf怎么合并成一个pdf?多个pdf文件怎么合并成一个文件?
  15. 史上最全各类面试题汇总,没有之一,不接受反驳
  16. 【python】身份证识别
  17. 阿里云ECS之下载与安装SSH(二)
  18. 经典的卷积神经网络结构,卷积神经网络基本结构
  19. 如何控制Echarts时间轴的刻度区间
  20. 读书笔记 来自网络

热门文章

  1. 实时翻译app哪个好用一些?分享四款实用的对话翻译软件
  2. 粤嵌实习智能家居day5--基于6818开发板
  3. 【C语言总结篇】新起点
  4. c语言怎么自定义关机时间,C语言编写简单的定时关机程序
  5. Pytorch 训练技巧
  6. RNA-seq数据构成原理
  7. column命令对齐文件内容
  8. 使用DOM4J解析XML文件代码
  9. 解决由于druid版本造成的慢sql问题
  10. Java后端程序员技术栈