浅谈MySQL Online DDL(下)
来源:互联网 发布:ibm linux 编辑:程序博客网 时间:2024/05/16 06:29
本文首发于个人微信公众号《andyqian》,期待你的关注!
前言
今天我们继续谈谈MySQL Online DDL,不知道MySQL Online DDL 是什么的,可以先回顾前面《浅谈MySQL Online DDL(上)》,《浅谈MySQL Online DDL(中)》这两篇文章。
Online DDL空间要求
在执行Online DDL操作时,其实也需要一些空间的,如下:
- 临时日志文件空间。该文件主要是执行DDL操作期间,用于保存DML操作数据的(innodb_online_alter_log_max_size)。临时日志文件大于指定的最大值时, ALTER TABLE操作会失败。未提交的DML操作将全部回滚。
- 中间表文件的空间,指的是,重建表的,DDL操作期间,会在原始表中创建一个临时中间表文件,注意的是,这里不是重建表格,中间表文件的大小可能大于等于原始表大小。
- 临时排序文件的空间。重建表的在线DDL操作将临时排序文件写入MySQL临时目录,该目录的大小可能大于该数据以及索引的大小总和,如果磁盘可用空间小于该值时,则会导致DDL操作失败。
低成本Online DDL操作
前面文章说了Online DDL诸多好处,简直爱不释手。但目前不是所有的DDL都支持在线操作的,有些DDL操作还是会影响生产的DML操作,甚至会锁住整张表。这时我们就应该理清楚,哪些是低成本操作,哪些高成本操作。
下面是常用操作不会锁住表(成本低)的操作:
注意: 上面说的索引,均为二级索引。
高成本 Online DDL操作
下面这些操作,由于数据会重组,即使是Online DDL操作,其操作也非常昂贵,不建议在生产环境高峰时直接操作。否则会造成大量的等待操作。
Online DDL注意点
在使用Online DDL操作时,有很多的注意事项,这里给出几个比较常见的注意点:
1. 如果是主从复制模式,主服务器执行Online DDL会停止从库的复制操作,并一直等待主库的DDL操作后,采会恢复复制操作,也就是说从库会有延迟现象产生。
- Online DDL操作不可中断,或者显示Online DDL操作的CPU/IO操作占用率。
- MySQL5.6之前的版本,执行Online DDL操作会报语法错误,例如:
alter table t_base_user modify telephone varchar(50) null comment "",lock=none;
该语句在MySQL5.6及以后的版本中,能正常执行,在5.6版本之前,则直接报语法错误。在执行前,一定要检查自己的MySQL版本。
今日命令
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]
命令: show databases;
作用: 显示当前数据库服务器上的所有数据库。 例如:
- 显示所有数据库
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || andyqian || mydata || mysql || performance_schema || sys |+--------------------+6 rows in set (0.00 sec)
- 过滤指定数据库
mysql> show databases like "andyqian";+---------------------+| Database (andyqian) |+---------------------+| andyqian |+---------------------+1 row in set (0.00 sec)
如下图所示:
应用场景: 在显示数据库服务器上的数据库时,非常有用,和show tables;
命令结合起来,非常有用!
小结
MySQL Online DDL 确实给我们带来了不少便利,但我觉得,这可以做为前期数据表设计不足或业务变化的一个补充,不应该过度依赖该操作。后期越多的Online DDL操作,说明前期的设计越不足。(这里不包括业务需求的变更。),越值得总结! (恩,这又是一个被打脸的地方,我自己数据库表设计时,时常也会比较粗心,忘记这,忘记那的。)到这里,MySQL Online DDL相关的内容已经全部说完了。下一篇我们继续说MySQL相关的内容。
ps:在文章记录的时候,有些知识点确实比较欠缺,写的不深入,理解也有些偏差,也有不少错别字。被各种打脸!不过我觉得挺好的,打脸了就记住了,就纠正了。下次就不被打脸了。
恩, 祝大家晚安!
扫码关注,一起进步
个人博客: http://www.andyqian.com
- 浅谈MySQL Online DDL(下)
- 浅谈MySQL Online DDL (上)
- 浅谈MySQL Online DDL(中)
- MySql online DDL 原理
- MySQL中的Online DDL
- MySQL--online ddl原理
- mysql online ddl原理
- MySQL online ddl原理
- MySQL online ddl原理
- MYSQL ONLINE DDL--PT-ONLINE-CHANGE-SCHEMA
- mysql 5.6 online ddl 测试
- Online DDL in MySQL 5.6
- mysql dml阻塞online ddl
- MySQL Online DDL …
- MySQL Online DDL的改进与应用
- MySQL Online DDL的改进与应用
- MySQL 5.6 Online DDL异常分析
- 【MySQL】online ddl 工具之pt-online-schema-change
- PE文件区块表IMAGE_SECTION_HEADER
- Calcite中的流式SQL
- 【java day5】构造代码块、构造函数
- Texture ‘XXX' is not readable, the memory can not be accessed form scripts, You can make the texture
- HashMap的底层粗介
- 浅谈MySQL Online DDL(下)
- ajax技术,也是有局限的,不能跨域,即A工程的html页面发起一个ajax请求即http url请求调B工程的action(A和B不在一个域中的),怎么办?解决办法
- 使用typeperf监控系统资源
- Codeforces 145A Lucky Conversion(思维)
- 深度学习之入门
- cdn
- Nginx的使用
- HashMap和HashTable到底哪不同?
- 八大排序算法