在线更改表结构pt-onling-schema-change

pt-online-schema-change是perona公司的工具,它解决了更改表时不锁表的问题,且不会影响到业务,其原理是:

  • 如果有外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,针对相应的设置进行处理。
  • 创建一个新的表,表结构为修改后的表结构,用于从源数据表向新数据表导数据。
  • 创建触发器,在复制数据开始后,将对源数据表继续进行数据修改的数据记录下来,以便在数据复制结束后执行这些操作,保证数据不丢失。
  • 复制数据,从源数据表中复制数据到新表中。
  • 修改外键相应的子表,根据修改后的数据,修改外键的关联的子表。
  • 更改源数据表为old表,把新表改名为源表名,并将old表删除。

测试结果:支持那种形式的修改。

  1. 对没有主键的表增加字段,该工具会报错。
  2. 对没有主键的表增加主键,可以创建成功。
  3. 从库上有replicate_do_table=book.t1,在master上增加字段,会报错,不会对把主库上产生的临时表复制到从库上。在把临时表改名成原表名时会报错。
  4. 对有外键的表,对父表增加字段,可以创建成功。
  5. 对有外键的表,对子表增加字段,可以创建成功。
  6. 字段含有not null不为空,会报错,需要增加默认值才可以更改成功。
时间: 2024-10-05 21:27:28

在线更改表结构pt-onling-schema-change的相关文章

MySQL在线修改表结构pt-osc

MySQL在线修改表结构pt-osc 重所周知 MySQL的DDL操作操作是相比比较昂贵的.因为MySQL在修改表期间会阻塞任何读写操作. 基本上业务处于瘫痪.如果数据量较大可能需要好几个小时才能完成,无法容忍这个操作.Percona开发了一系列的工具 Percona Toolkit包,其中有一个工具pt-online-schema-change可以在线执行DDL操作,不会阻塞读写操作从而影响业务程序.当然也有其他的工具 例如 MySQL5.6的online ddl 还有gh-ost 本文主要讲

[linux][mysql] 命令更改表结构:添加、删除、修改字段、调整字段顺序

原文出处:http://www.phpernote.com/MySQL/1120.html 1 常用的通过mysql命令来更改表结构的一些sql语句,包括添加.删除.修改字段.调整字段顺序. 2 3 添加字段: 4 5 alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid`; (在哪个字段后面添加) 6 7 删除字段: 8 9 alter table `user_mo

在线修改表结构mysql5.5版本和pt-online-schema-change

一.测试环境 系统:Centos 6.2 数据库:mysql Ver 14.14 Distrib 5.5.18, for Linux (x86_64) using readline 5.1 percona工具:percona-toolkit-2.2.12 测试数据库大小:tx_ljxz_71--16G.t_log_item--3G 二.在线修改表结构的过程 mysql在线修改表结构 1 按照原始表(original_table)的表结构和DDL语句,新建一个不可见的临时表(tmp_table)

用 pt-online-schema-change在线修改表结构的时候报超时

用工具pt-online-scheme-change执行添加字段是报错,提示超时,在凌晨反复执行几次后都是在创建触发器的时候超时退出了,表并不是很大大概1000w数据 执行语句:pt-online-schema-change --user=root --password='xxxxxx' --host=127.0.0.1 --port=3306 --charset=utf8 --alter="add flow_n int(11)  default 1  COMMENT '数据流个数' "

mysql 在线修改表结构工具 gh-ost

gh-ost使用测试: gh-ost -host='192.168.65.136' -user=root -password='' -database='haha' -chunk-size=100000  -allow-on-master -execute  -initially-drop-ghost-table -exact-rowcount --initially-drop-old-table  -alter='modify AreaID varchar(10)' -table='t_pol

MYSQL分库分表和不停机更改表结构

在MYSQL分库分表中我们一般是基于数据量比较大的时间对mysql数据库一种优化的做法,下面我简单的介绍一下mysql分表与分库的简单做法. 1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是

pt-online-schema-change 在线修改表结构

1. 参数 参数 默认值 说明 --host=xxx --user=xxx --password=xxx 连接实例信息,缩写-h xxx -u xxx -p xxx,密码可以使用参数--ask-pass 手动输入. --alter 结构变更语句,不需要 ALTER TABLE关键字.与原始ddl一样可以指定多个更改,用逗号分隔. D=db_name,t=table_name 指定要ddl的数据库名和表名 --max-load 默认为Threads_running=25.每个chunk拷贝完后,会

mysql更改表结构:添加、删除、修改字段、调整字段顺序

添加字段: alter table `user_movement_log`Add column GatewayId int not null default 0 AFTER `Regionid` (在哪个字段后面添加) 删除字段: alter table `user_movement_log` drop column Gatewayid 调整字段顺序: ALTER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int not n

percona-toolkit之pt-online-schema-change在线修改表结构

[[email protected] bin]# ./pt-online-schema-change --user=checksums --password=checksums  --recursion-method="processlist"    --alter="add column birth3 int" h=10.50.12.33,P=3336,D=gaoquan,t=t1 --execut Found 2 slaves: BJ-ECS-XHM-TEST-