精华内容
下载资源
问答
  • mysql在线ddl操作

    2020-01-03 15:33:03
    转载 MySQL在线DDL修改表结构的简单经验分享 gh-ost:在线DDL修改MySQL表结构工具
    展开全文
  • mysql在线ddl操作流程

    2017-04-14 00:03:00
    mysql在线ddl操作流程图
    展开全文
  • Mysql在线DDL工具

    2020-04-14 16:43:23
    因此,寻求通过在线DDL工具进行表结构修改。 这里选择了常用的2个在线DDL工具gh-ost 和pt-online-schema-change进行测试。 二 gh-ost 是github贡献的一款online DDL工具。大致原理如下 1 根据原表新建一个临时....

    一 背景

    在实际生产应用中,经常会有mysql表结构修改的场景,涉及到的表数据量大,如果直接修改,锁表时间过长,影响正常业务。因此,寻求通过在线DDL工具进行表结构修改。

    这里选择了常用的2个在线DDL工具gh-ost 和pt-online-schema-change进行测试。

     

    二 gh-ost 是github贡献的一款online DDL工具。大致原理如下

    1 根据原表新建一个临时表,与原表表结构一致,然后执行表结构修改

    2 拷贝原表的已有数据到新的临时表

    3 通过伪装成mysql的一个slave,读取mysql binlog日志,同步实时的更新数据到新表

    4 数据copy完成以后,锁住旧表,交换临时表和旧表的表名

    5 删除旧表,操作完成

     

    注意事项:

    1 Gh-ost 有三种工作模式,可以根据情况选择

    连上从库,修改应用到主库:此模式会自动搜索从库,在从库上拉取binlog,但是表结构的修改直接应用到主库。默认是采用此模式

    直接应用到主库:直接从主库拉取binlog日志,修改也是应用到主库,通过--allow-on-master来启用

    在从库修改和测试:所有操作都在从库上进行,通过--migrate-on-replica参数启用,此模式适用于测试,对比主从数据是否一致

     

     

    2 –execute参数指定是否真正应用执行表结构修改,可以先不加此参数,测试脚本执行的正确性,待脚本执行ok再加上次参数

     

     

    下面进行测试

    官网下载https://github.com/github/gh-ost binary版本的gz文件,直接解压后可以使用

     

    ./gh-ost -user=root -password=thriftdy@819 -database=adcenter2 -table=passport_4366 -host=221.228.209.159  -alter=" modify column passport varchar(64)" --allow-on-master –verbose

     

    该表数据为1000万,执行完成约43分钟

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    三 pt-online-schema-change

    Pt-osc 是另一款在线DDL工具。大致原理如下

    1 根据原表新建一个临时表,与原表表结构一致,然后执行表结构修改

    2 建立三个触发器,分别对应insert,update,delete操作

    3 拷贝原表的已有数据到新的临时表

    4 数据copy完成以后,锁住旧表,交换临时表和旧表的表名

    5 删除旧表,操作完成

     

     

    注意事项:

    1 原表不能有insert,update,delete触发器

    2 原表必须要有主键

     

    测试

    官网下载binary版本的gz文件。解压后即可在bin目录下执行

    https://www.percona.com/doc/percona-toolkit/3.0/pt-online-schema-change.html

     

    该工具执行需要使用perl脚本,因此如果机器没有安装相应的perl包的话无法执行。根据提示安装对应的perl包即可。另外执行脚本需要root权限。

     

    ./pt-online-schema-change D=adcenter2,t=passport_4366,h=221.228.209.159,u=root,p=thriftdy@819 --alter "modify column passport varchar(50)" --print --execute;

    该表数据为1000万,执行完成时间25分钟

     

     

     

    从测试结果来看,pt-osc执行速度上要快于gh-ost,但是两者各自适合的场景略有不同,大家可以根据自身业务需求进行选择。

    展开全文
  • mysql有所研究的都知道,当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会显示这个DDL遇到了MDL锁等待,即“waiting for table metadata lock...

    对mysql有所研究的都知道,当mysql某个业务表上有未提交的活动事务的时候,你去执行在线DDL,这相当危险,直接会被卡住,show processlist里面会显示这个DDL遇到了MDL锁等待,即“waiting for table metadata lock",此时如果你去喝咖啡去了。。。杯具就发生了,因为此时这个业务表连select都会被阻塞。

     

    mysql在5.6官方文档里面说自己可以支持大部分在线DDL了,包括常见的加字段、加索引、改字段等等。但是要注意:这里所谓的支持在线DDL,指的是针对死表(执行DDL前表上没有未提交的事务)的情况,即在mysql5.6里对死表执行DDL的时候,不会出现mysql5.5的”copy to tmp table"的情况,只是提示“altering table",在DDL执行期间不会像mysql5.5一样阻塞这个表上的DML。

     

    但是生产系统的繁忙业务表,肯定是活表(表上每时每刻都有未提交的事务),所以在上面搞在线DDL则是另外的话题了,这里不详细解释。

     

    但是有一点,mysql没有oracle做得好,mysql一些危险的sql,在执行的时候,会直接卡住,没有任何提示,很不友好,如下:

    wKioL1cHlMOSNkXYAAAX6INuuk0612.png

     

    oracle,在一个有活动事务的表上执行DDL的时候,oracle会报

    “ORA-00054: resourcebusy and acquire with NOWAIT specified”,这种提示就非常友好了。

    展开全文
  • MySQL 大表在线DML神器–pt-online-schema-change 原理 安装 常用操作、命令、执行过程 添加字段 修改字段 改名字段 删除字段 添加索引 删除索引 问题 Cannot connect to MySQL: install_driver(mysql) ...
  • RENAME TABLE `dbteamdb`.`user` TO `dbteamdb`.`_user_old`, `dbteamdb`.`_user_new` TO `dbteamdb`.`user` Swapped original and new tables OK. Rebuilding foreign key constraints…
  • MySQLDDL

    2019-05-05 11:20:06
    文章目录前言MySQL DDL 的方法各类工具的对比各类工具的使用方法COPYINPLACEINSTANTpt-online-schema-changegh-ostMySQL DDL 的使用注意事项DDL 的所需时间负载额外空间占用主从同步延时MDL其他MySQL DDL 的原理简析...
  • MYSQL-DDL

    万次阅读 2020-06-30 01:22:21
    是一种规则,定义了如何操作所有关系型数据库(如 Oracle, Mysql DB2) SQL 通用语法 单行多行书写,分号结尾 不区分大小写,但关键字建议大写 注释 单行:-- 这是一段注释 或 # 这是一段注释 多行 /* 这是一段注释 ...
  • MySQL-DDL

    千次阅读 2016-12-07 11:16:51
    数据库 DDL sql mysql
  • mysqlDDL操作

    万次阅读 2016-04-17 14:59:35
    mysql常用的DDL语句探究
  • 1,除了主键修改,字段类型与长度变更,字符集变更,其他都支持ddl.部分操作占用资源较多. 2,修改前确保没有大事务发生. 3,通过row_log记录ddl过程dml. 4,ddl过程被kill,没有影响.异常掉电,因有临时表影响,需特殊手动...
  • MySQL 变更 DDL 杂谈

    2021-07-07 13:53:40
    MySQL 5.6 版本开始支持 Online DDL 即在进行 DDL 变更过程中允许并发 DML 操作,今天一起聊聊 DDL 那些事~ 文章目录一、各版本对 DDL 支持二、DDL 子句设置三、Online DDL 真的不锁表吗?四、DDL 变更流程 一、各...
  • MySQLDDL

    2018-04-22 22:22:12
    DDL语句 数据定义语言定义对数据库对象(库、表、列、索引、约束)的操作1、定义表2、查询表DESC student3、向表中添加数据4、删除表5、修改表名6、修改表结构7、约束 7.1主键约束 7.2非空约束 7.3唯一性约束 ...
  • 浅谈MySQL Online DDL (上)

    2017-11-29 09:38:08
    MySQL在线DDL,你知道吗?点我就全知道了
  • debezium mysql connector DDL 解析

    千次阅读 2018-06-12 23:40:51
    debezium实现了一个mysql ddl语法解析器,用来解析ddl语句。debezium在最近会对解析器进行优化,更换mysql语法解析器。为什么debezium mysql connector需要ddl parser? 为什么需要DdlParser debeizum mysql ...
  • mysql DDL语言执行过程

    2016-03-01 17:02:17
    由于mysql在线ddl(加字段、加索引等修改表结构之类的操作)过程如下:  A.对表加锁(表此时只读) B.复制原表物理结构 C.修改表的物理结构 D.把原表数据导入中间表中,数据同步完后,锁定中间表,并删除原表 E.rename...
  • MySQL5.6在线DDL需要注意的问题

    千次阅读 2017-03-31 17:58:21
    背景:MySQL5.6在线DDL不锁表,现在我有一张1亿的表,需要增加一个字段,假如我让你去增加这个字段,你应该注意什么,具体怎么操作?操作如下:1.注意磁盘空间(临时表目录) 2.当前内存剩余量 3.当前有没有大的事务...
  • MySQL常用DDL语句

    千次阅读 2019-09-09 17:08:51
    删除表 -- 如果存在则删除 DROP TABLE IF EXISTS t_user; 创建表 -- 创建表 CREATE TABLE t_user( id BIGINT(20) unsigned NOT NULL AUTO_INCREMENT, user_code VARCHAR(20) NOT NULL COMMENT '系统号', ...
  • MySQL原子DDL认知

    2020-04-15 16:19:28
    本节目标 1.了解什么是原子DDL 2.熟悉原子DDL的使用 什么是原子DDL? 原子DDL的使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,601
精华内容 39,040
关键字:

mysql在线ddl

mysql 订阅