本篇内容介绍了“怎么线上变更数据库表结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务坡头,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 是因为操作过程中,没有增删改的记录,并没有触发。这里还可以做下压测,看记录插入速度如何。
“怎么线上变更数据库表结构”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!