怎么线上变更数据库表结构

本篇内容介绍了“怎么线上变更数据库表结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联公司主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务坡头,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

常见线上变更表结构的方法有两种,第一种是online ddl ,alter, 第二种是用类似工具percona。本文主要用实例描述下第二种方式的基本原理。

原理 

 percona  等工具的原理比较简单。1,copy 一个新表;2,alter 表结构; 3,添加 update, delete, insert 三个触发器;4,insert igonore 原表的数据;5,删掉触发器。这里不用加锁就是因为有触发器在同步新增的改动,所有,一旦以前表有触发器,就不适合这种方式。

操作实例

1, 新建一个表

create table person(id int ,name varchar(8), PRIMARY KEY (id)) ;

2, 插入1条记录

insert person (id, name) values (1, "zhangsan");

3,  变更表结构

pt-online-schema-change --alter 'add column sex varchar(100)' p='123456',u=root,D=test,t=person --no-check-replication-filters --execute

4, 日志解析:

No slaves found.  See --recursion-method if host didi has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
  analyze_table, 10, 1
  copy_rows, 10, 0.25
  create_triggers, 10, 1
  drop_triggers, 10, 1
  swap_tables, 10, 1
  update_foreign_keys, 10, 1
Altering `test`.`person`...
Creating new table...
Created new table test._person_new OK.
Altering new table...
Altered `test`.`_person_new` OK.
2019-08-29T20:05:34 Creating triggers...
2019-08-29T20:05:34 Created triggers OK.
2019-08-29T20:05:34 Copying approximately 1 rows...
2019-08-29T20:05:34 Copied rows OK.
2019-08-29T20:05:34 Analyzing new table...
2019-08-29T20:05:34 Swapping tables...
2019-08-29T20:05:34 Swapped original and new tables OK.
2019-08-29T20:05:34 Dropping old table...
2019-08-29T20:05:34 Dropped old table `test`.`_person_old` OK.
2019-08-29T20:05:34 Dropping triggers...
2019-08-29T20:05:34 Dropped triggers OK.
Successfully altered `test`.`person`.

这里没有insert ignore 是因为操作过程中,没有增删改的记录,并没有触发。这里还可以做下压测,看记录插入速度如何。

“怎么线上变更数据库表结构”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


本文标题:怎么线上变更数据库表结构
文章路径:http://azwzsj.com/article/peocsc.html