加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[原创]Django+Bootstrap+Python+posc实现MySQL分库分表DDL变更

(2018-01-15 16:02:23)
标签:

paramiko

pt_online_change_sch

mysql分库分表

        MySQL对业务表的分库分表,使得业务系统可以非常方便水平扩展提高了系统处理能力, 但是分库分表上线后DDL变更非常辣手尤其是成千上万张表分散在上百套集群中, 手动处理那是灾难性. 脚本随意可以方便执行,但是对于每套集群都貌似的提供一套定制化的脚本, 运维出错风险太高.
        每次值班上线都被分库分表得系统DDL折腾生无可恋,研发同事提供分库分表脚本, 上传到集群主库中,然后执行或者在跳板机上直接远程执行, 执行方式大概会采用如下:
          1、直接执行                锁表数据量大时会阻塞业务
          2、ptosc执行              pt_online_change_schema不会阻塞业务

         使用python根据分库分表规则,动台收集分库分表信息,收集策略根据业务需要可以动态调整,具体分库信息如下:

http://s4/mw690/001gMJqVzy7hoDMn92b93&690


           执行通过python开启多线程,对每个集群开启一个执行线程动态调用pt_online_change,采用异步会写执行明细到日志系统, 实现了可以近似试试查看执行进度功能.
http://s9/mw690/001gMJqVzy7hoEPQtGUe8&690

          分库分表实现主要有 1、字典收集模块      2、执行模块     3、日志系统
字典收集和日志没有什么好说的,根据系统分库分表策略自己动手就行,碰到难点就python调用pt执行不能返回结果,只能等执行完了,回写日志后才能看到,这个非常不人性化,一个执行不能看到执行进度,对于大表更改要经过数个小时黑窗口,是非常恐怖的。下面是实现实时返回结果代码:
http://s6/mw690/001gMJqVzy7hoES9mcde5&690





0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有