设为首页 收藏本站
查看: 1240|回复: 0

[经验分享] MySQL在线大表DDL操作

[复制链接]

尚未签到

发表于 2018-10-6 10:13:25 | 显示全部楼层 |阅读模式
  MySQL在线大表DDL操作的方法:
  1、主从架构轮询修改
  a、主库会话级别的记录binglog的参数关闭
  b、500\502错误异常捕捉
  c、检查备库的second behind master是否有延迟
  d、varchar有页分裂的情况,尽量减少varchar的长度
  2、在线工具online-schema-change
  a、超过1000w行,速度会变慢(半小时左右)
  参考链接:http://www.linuxidc.com/Linux/2016-08/134761.htm
  作为DBA,我们也常常会碰到这样的需求:需要在不影响线上业务的情况下给表添加一个字段或索引。如果是一张只有几百或几千条记录的小表,这样的需求是非常容易解决的。但如果所管理的表数据量已经上亿、而且应用与数据库交互非常频繁,不允许停机窗口的出现,这样的需求又该如何满足?
  大多数的alter table操作都会涉及lock-->copy to new table-->rename-->unlock的过程,锁表时间会很长,而且alter table 的process不可被kill,一旦执行就不可回退。
  在MySQL5.5和之前版本,在运行的生产环境对大表(超过数百万纪录)执行Alter操作是一件很困难的事情。因为将重建表和锁表,影响用户者的使用。
  从MySQL5.6开始,Online DDL特性被引进。他增强了很多种类的Alter Table操作避免拷贝表和锁表,在运行Alter操作的同时允许运行select,insert,update,delete语句。因此在最新版本,我们可以通过使用ALGORITHM和LOCK选项抑制文件拷贝和加锁。
  但是即使在MySQL5.6,仍然有一些Alter操作(增加/删除列,增加/删除主键,改变数据类型等)需要重建表。
  虽然mysql5.6对atler table操作有了很大改进,但仍有很多限制,并不建议直接在线上使用。如果线上有DDL的需求我们建议使用以下两种方式:
  1、主从架构轮询修改
  2、使用在线修改工具online-schema-change
  对于第一种方式,使用的前提是,你的数据库架构是一个集群,如果不是,也就无所谓的轮询修改。修改的原理就是利用主从服务,在应用无感知的情况下,得到停机窗口,进行修改。
  今天我们着重讲第二种方式,利用第三方工具实现在线大表的DDL操作。这种方式在alter操作更改表结构的时候不用锁定表,也就是说执行alter的时候不会阻塞写和读取操作。
  工作原理:
  创建一个和你要执行alter操作的表一样的空表结构,执行表结构修改,然后从原表中copy原始数据到表结构修改后的表,当数据copy完成以后就会将原表移走,用新表代替原表,默认动作是将原表drop掉。在copy数据的过程中,任何在原表的更新操作都会更新到新表,因为这个工具在会在原表上创建触发器,触发器会将在原表上更新的内容更新到新表。如果表中已经定义了触发器这个工具就不能工作了。
  注意点:
  1、操作的表必须有主键或唯一索引否则报错。
  2、如果表有外键,除非使用 --alter-foreign-keys-method 指定特定的值,否则工具不予执行。
  3、当业务量较大时,修改操作会等待没有数据修改后,执行最后的rename操作。因此,在修改表结构时,应该尽量选择在业务相对空闲时,至少修改表上的数据操作较低时,执行较为妥当。
  4、由于可能存在一定的风险,在操作之前,建议对数据表进行备份,可以使得操作更安全、可靠。
  5、当是主从环境,不在乎从的延迟,则需要加--recursion-method=none参数。当需要尽可能的对服务产生小的影响,则需要加上--max-load参数。
  环境搭建:
  安装依赖环境
  ##Install DBI
  wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz
  tar -zxvf DBI-1.625.tar.gz
  cd DBI-1.625
  perl Makefile.PL
  make
  make install
  ##Install DBD::Mysql
  wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.023.tar.gz
  tar -zxvf DBD-mysql-4.023.tar.gz
  cd DBD-mysql-4.023
  perl Makefile.PL
  make
  make install
  安装percona-toolkit:
  ##Install percona-toolkit
  wget percona.com/get/percona-toolkit.tar.gz
  tar -zxvf percona-toolkit-2.2.16.tar.gz
  cd percona-toolkit-2.2.16
  perl Makefile.PL
  make
  make install
  常用操作:
  添加字段
  [root@rac1 bin]#  ./pt-online-schema-change -uroot  -pxxx --alter='add column col1_test int' --execute D=test,t=t_xxx_compensate
  修改字段
  [root@rac1 bin]# ./pt-online-schema-change  -uroot  -pxxx  --alter='MODIFY COLUMN col1_test TINYINT NOT NULL DEFAULT 0 ' --execute D=test,t=t_xxx_compensate
  改字段名
  [root@rac1 bin]# ./pt-online-schema-change  -uroot  -pxxx  --alter='CHANGE COLUMN col1_test address varchar(30)' --execute D=test,t=t_xxx_compensate
  删除字段
  [root@rac1 bin]# ./pt-online-schema-change  -uroot  -pxxx  --alter='drop  column  address ' --execute D=test,t=t_xxx_compensate
  添加索引
  [root@rac1 bin]# ./pt-online-schema-change -uroot  -pxxx --alter='add key indx_test(col1_test) ' --execute D=test,t=t_xxx_compensate
  删除索引
  [root@rac1 bin]# ./pt-online-schema-change -uroot  -pxxx --alter='DROP INDEX indx_test' --execute D=test,t=t_xxx_compensate


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-613568-1-1.html 上篇帖子: MySQL数据库入门——常用基础命令 下篇帖子: MaxScale2.2如何自动加载MySQL用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表