mysql在线DDL(与oracle的区别)

对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,在执行的时候,会直接卡住,没有任何提示,很不友好,如下:

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

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

时间: 2024-10-18 20:02:40

mysql在线DDL(与oracle的区别)的相关文章

mysql的过程和Oracle的区别

mySQL 和 Oracle 不一样  , mysql 中的function 中, 没有 CREATE OR REPLACE如果需要用到这句,可以使用 DROP FUNCTION IF EXISTS `GetUserName`; CREATE FUNCTION `GetUserName`(nUserID INT) ...代替. 如: (错误) CREATE OR REPLACE PROCEDURE sp_test() BEGIN SET @z = 'hello World'; SELECT @z

[资料收集]MySQL在线DDL工具pt-online-schema-change

MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网

mysql在线ddl操作

mysql5.6开始支持在线ddl,在线ddl能够提供下面的好处: 1提高生产环境的可用性2在ddl执行期间,获得性能和并发性的平衡,可以指定LOCK从句与algorithm从句,lock=exclusize会阻塞整个表的访问,lock=shared会允许查询但不允许dml,lock=none允许查询和dml操作,lock=default或是没有指定,mysql使用最低级别的锁,algorithm指定是拷贝表还是不拷贝表直接内部操作,3只对需要的地方做改变,不是创建一个新的临时表. 之前ddl操

MySQL在线DDL gh-ost 使用说明

原文:gh-ost: GitHub's online schema migration tool for MySQL http://github.com/github/gh-ost MySQL在线更改schema的工具很多,如Percona的pt-online-schema-change. Facebook的 OSC 和 LHM 等,但这些都是基于触发器(Trigger)的,今天咱们介绍的 gh-ost 号称是不需要触发器(Triggerless)支持的在线更改表结构的工具. 本文先介绍一下当前

使用 pt-online-schema-change 实现在线DDL

问题背景 平时进行修改表的结构,更改字段,新增字段,更改字段名称一般都是通过ALTER TABLE  语法进行修改的.对于小表或者并发访问不是很大的情况是OK.但是如果是在线大表,那就很麻烦.由于表数据量大,复制表需要比较长的时间,在这个时间段里面,表是被加了锁的(写锁),加写锁时其他用户只能select表不能update.insert表.表数据量越大,耗时越长. mysql在线ddl(加字段.加索引等修改表结构之类的操作)过程如下: 对表加锁(表此时只读) 复制原表物理结构 修改表的物理结构

论MySQL与Oracle的区别

1 id自动增长 MySQL可设置auto increment,oracle中则不可直接设置,需要通过序列实现.oracle 序列create sequence emp_sequenceincrement by 1start with 1nomaxvaluenocyclecash 10注意:第一次NEXTVAL返回的是初始值:随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值.CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后

MySQL5.7—在线DDL总结

---切记:DDL操作要在业务低峰期进行 1.MySQL各版本,对于DDL的处理方式是不同的,主要有三种: ①:Copy Table方式: 这是InnoDB最早支持的方式.顾名思义,通过临时表拷贝的方式实现的.新建一个带有新结构的临时表,将原表数据全部拷贝到临                    时表,然后Rename,完成创建操作.这个方式过程中,原表是可读的,不可写.但是会消耗一倍的存储空间. ②:Inplace方式:这是原生MySQL 5.5,以及innodb_plugin中提供的方式.

MySQL 总结篇 [在Oracle基础上学习的MySQL]

一.学习环境 MySQL 5.7社区版 Navicat for MySQL 百度网盘下载链接:https://pan.baidu.com/s/1yGnznwoZ8CaMgrCsDBhKAQ 二.MySQL 与 Oracle 的区别 实例区别: MySQL 是轻量型数据库,开源免费. Oracle 是收费的而且价格非常高. MySQL 一个实例可以操作多个库,而 Oracle 一个实例只能对应一个库. MySQL 安装完后 300M 而 Oracle 有 3G 左右. 操作区别: 主键: MySQ

Mysql常用DDL命令

Mysql常用命令:--在Mysql中,语句的结尾要么使用;要么使用\g或者\G作为结束符.进入Mysql (---其中Your MySQL connection id is 5表示到当前为止连接到Mysql数据库的次数,Server version: 5.5.37-log Source distribution表示Mysql数据库的版本)[[email protected] data]$ mysql -uroot -pEnter password:Welcome to the MySQL mo