1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| 在MySQL中,DDL语句在对表进行操作时要锁"元数据表"的,此时所有修改类的命令无法正常运行。所以对于大表,业务繁忙的表,进行线上DDL操作时,要谨慎,尽量避开业务高峰期间进行DDL。
数据表是存储数据的,而元数据表就是存储定义数据表的数据。这类似于Linux的Inode信息。在MySQL中,DDL语句对表进行操作时,是要锁"元数据表"的。此时,所有修改类的命令无法正常运行。在对于达标,业务繁忙的表,进行线上DDL操作时,要谨慎。 建议? 尽量避开业务单独高峰期进行DDL操作,如果非要做请走流程(比如发送邮件,抄送领导,遇到生产故障也有据可查,防人之心不可无); 建议使用pt-osc(pt-online-schema-change),gh-ost(工具进行DDL操作),减少锁表的影响; 如果是8.0版本,可以不用pt工具,8.0以前一般需要借助于以上工具。
关于pt工具 pt-osc工作流程: 1、检查更改表是否有主键或唯一索引,是否有触发器 2、检查修改表的表结构,创建一个临时表,在新表上执行ALTER TABLE语句 3、在源表上创建三个触发器分别对于INSERT UPDATE DELETE操作 4、从源表拷贝数据到临时表,在拷贝过程中,对源表的更新操作会写入到新建表中 5、将临时表和源表rename(需要元数据修改锁,需要短时间锁表) 6、删除源表和触发器,完成表结构的修改。
pt-osc工具限制 1、源表必须有主键或唯一索引,如果没有工具将停止工作 2、如果线上的复制环境过滤器操作过于复杂,工具将无法工作 3、如果开启复制延迟检查,但主从延迟时,工具将暂停数据拷贝工作 4、如果开启主服务器负载检查,但主服务器负载较高时,工具将暂停操作 5、当表使用外键时,如果未使用--alter-foreign-keys-method参数,工具将无法执行 6、只支持Innodb存储引擎表,且要求服务器上有该表1倍以上的空闲空间。
pt-osc之alter语句限制 1、不需要包含alter table关键字,可以包含多个修改操作,使用逗号分开,如"drop clolumn c1, add column c2 int" 2、不支持rename语句来对表进行重命名操作 3、不支持对索引进行重命名操作 4、如果删除外键,需要对外键名加下划线,如删除外键fk_uid, 修改语句为"DROP FOREIGN KEY _fk_uid"
|