当前位置:主页 > 房产楼市 > 楼市开盘 >

Seans Notes

www.vvv29.com,www.yaosese.com,wwwtudoucom,xiao77文学,zend studio 中文版
2019-10-18 07:35 来源:互联网 点击次数 :1098 次

  这是针对公司内部的一个分享,主题是去年10月份就想好的,中间因为一些项目,也包括自己的拖延症,ppt一直没准备好。

  我们有不少项目依赖于binlog同步数据,所以对binlog的格式以及内部结构进行了简单介绍

  MySQL的 limit m,n 工作原理就是先读取符合where条件的前面m+n条记录,然后抛弃前m条,返回后面n条,所以m越大,偏移量越大,性能就越差。这也是大部分ORM框架生成的分页sql。

  这个参数原本是解决像 NDB Cluster 多节点写入冲突的情况,也可以在普通主从、双主、环形复制等情况下解决冲突,保持幂等性。幂等性怎么定义,感兴趣的可以阅读The differences between IDEMPOTENT and AUTO-REPAIR mode)。

  这个参数不能在线修改,只能加到配置文件里面或者启动的时候带上--slave-skip-errors=1032,1062。除非你真的理解它skip掉了什么,否则不建议使用。

  讲一个我所遇到的坑。在我们的一个分库项目中,需要把一个database里面的数据拆成32份,于是做了个主从,把从库里面不需要的那份删除,但复制过来肯定会报 HA_ERR_KEY_NOT_FOUND 错误,于是这也是所期望的,就设置了--slave-skip-errors=1032。

  但接下来就出现 1062:HA_ERR_FOUND_DUPP_KEY 错误!从库只会删数据,不会写入和更新,怎么会出现重复数据?读者不妨试想一下为什么。

  MySQL Binlog 里面记录了每行数据的变更,开发有时候需要根据这些变更的时间、中间值去查问题,是bug导致的,还是用户操作引发的。然而原始binlog内容不利于检索,有段时间使用阿里RDS企业版DMS数据追踪的功能,也能完成这个工作,甚至生成回滚sql,后由于收费以及容量不够的缘故,放弃不用。

  本文所介绍的就是基于外面开源的各类组件,整合起来,达到类似数据追踪的功能 —— binlog 可视化。

  代替ELK技术栈的日志收集、处理、展示平台。社区版够用,需要自行安装,也可以把 graylog 换成 ELK stack。

  nxlog 是用 C 语言写的一个开源日志收集处理软件,它是一个模块化、多线程、高性能的日志管理解决方案,支持多平台。

  在【编排模板】里选择maxwell-graylog-rabbitmq,【创建应用】下一步修改编排模板:

  需要分析 binlog 大致位于哪个时间段。请尽可能的精确,如果时间范围过大,可能耗时非常久。3个binlog入完graylog大约6分钟。不能保持示例默认的值

  比如在数据库迁库时,将当天表的数据同步到新库,模拟阿里云dms数据传输的功能,相当于在测试环境演练,减少失误。

  比如数据库迁移项目,切换期间数据写向新库,但如果切换失败需要回滚到老库,就需要把这段时间新增的数据同步回老库(启动消费程序),这就不需要程序段再考虑复杂的回滚设计。

  关于数据库误操作的闪回方案,见文章MySQL根据离线binlog快速闪回。binlog2sql的-B选项可以将sql反向组装,生产回滚sql。如果需要完善的闪回功能,要进一步开发,提高易用性。

  目前组内一版的binlog搜索功能,是离线任务处理的方式,好处是不会占用太大空间,缺点是处理时间较长。通过实时binlog解析过滤的方式,入ES可以快速搜索。需要进一步开发完善。

  数据已经生成,要完成 MySQL binlog 增量数据同步,还差一个消费者程序,将rabbitmq里面的消息取出来,在目标库重放:

关键词:

(责任编辑:admin)
文章人气: