温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-11-16 16:42:34 来源:亿速云 阅读:253 作者:iii 栏目:大数据

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

常见线上变更表结构的方法有两种,第一种是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 是因为操作过程中,没有增删改的记录,并没有触发。这里还可以做下压测,看记录插入速度如何。

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI