MySQL修改大表工具pt

72次阅读
没有评论

共计 1478 个字符,预计需要花费 4 分钟才能阅读完成。

这篇文章主要讲解了“MySQL 修改大表工具 pt-online-schema-change 的原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“MySQL 修改大表工具 pt-online-schema-change 的原理”吧!

MySQL 修改大表工具 pt-online-schema-change 的使用限制:

1)、如果修改表有外键,除非使用 –alter-foreign-keys-method 指定特定的值,否则工具不予执行

2)、被修改表必须要有主键,否则报错:Cannot chunk the original table `houyi`.`ga`: There is no good index and the table is oversized. at ./pt-online-schema-change line 5353.

3)、被修改表上不能有针对 after delete|insert|update 三个触发器,否则修改表结构操作失败

MySQL 修改大表工具 pt-online-schema-change 原理:

1)、首先使用帐号密码连接到 mysql 后,获取指定表的状态信息,检查是否有触发器,检查表是否有主键。

2)、接着按照修改表的表定义,新建一个名为 _tb_new 不可见的临时表,对这个表执行 alter 添加字段,并校验是否执行成功。

3)、然后针对源表创建三个触发器,分别如下:

create trigger db_tb_del after delete on db.tb for each row delete ignore from db._tb_new where db._tb_new.id = OLD.id #删掉新表中 db._tb_new.id = OLD.id 的数据,否则忽略操作

create trigger db_tb_del after update on db.tb for each row replace into db._tb_new(id,…) values(new.id,…)  #源表执行 update 的时候,把对应的数据 replace into 的方式写入新表

create trigger db_tb_del after insert on db.tb for each row replace into db._tb_new(id,…) values(new.id,…)  #源表执行 insert 操作的时候,把对应的数据 replace into 的方式写入新表

4)、触发器创建好之后会执行 insert low_priority ignore into db._tb_new(id,..) select id,… from tb lock in share mode 语句复制源表数据到新表。

5)、复制完成之后执行语句:rename table db.tb to db._tb_old,db._tb_new to db.tb 同时把源表修改为_tb_old 格式,把新表_tb_new 修改为源表名字的原子修改。

6)、接着,如果没有加不删除 old 表的选项,那么就会删除 Old 表,然后删除三个触发器。到这里就完成了在线表结构的修改。整个过程只在 rename 表的时间会锁一下表,其他时候不锁表。

感谢各位的阅读,以上就是“MySQL 修改大表工具 pt-online-schema-change 的原理”的内容了,经过本文的学习后,相信大家对 MySQL 修改大表工具 pt-online-schema-change 的原理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1478字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)