MySQL主从延时问题

最近发现了一个主从相关的问题,在这里记录一下。
一、背景:在业务过程中产生的财务数据需要发送给财务团队。然后公司已经有相关的服务A,通过Binlog Dump实时获取数据库的增量日志,并通过解析后获取具体的数据变更,最后将变更记录推送到Kafka中以供业务方消费。于是我们的方案就是消费A服务产生的变更记录,然后联表查询其他表的字段(因为财务团队需要的数据包通常是多表的,但是A服务产生的变更记录是基于单表),聚合之后投递出去。
出现的问题:现在有一份财务需要的财务信息,包括c表和d表的信息。A服务解析出c表和d表的变更,会产生两份变更记录,然后基于c表和d表的两份变更记录进行联表,然后发现在c表进行联表查询d表的信息 的时候发现没有查到d表的信息,但是c表中已经包含有d表的相关主键id了。因此只能说明是由于主备延迟导致的。
二、分析:看代码和数据库记录发现c表和d表的变更是基于同一个事务产生的,ctime和mtime都是一样的。对于同一个事务来说,那么应该是同时提交到binlog中的?但是binlog产生之后,但是从库查询的时候查不到,那基本说明就是主从延迟了,主从延迟其实最主要的原因是从relay log写入到从库表太慢导致,对于Binlog Dump和从库同步来说,都是从主库进行同步的,但是Binlog Dump通过Kafka先到了我们的服务,但是从库还差不到,那就是从relay log写入到从库表中太慢了。那么怎么看主从之间的延时呢?怎么监控主从之间的延时情况?以及同一数据变更多次事务是怎么写入binlog的呢?Dump binlog的基于文件位置和基于GTID有什么区别呢?

其实,binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。一个事务的 binlog 是不能被拆开的,因此不论这个事务多大,也要确保一次性写入。这就涉及到了 binlog cache 的保存问题。

image.png

通过公司的MySQL监控工具看了下相应库的主从延时,发现延时比较大的时候能够达到1s,1s的时间足够将消息处理完并发出去了,因此就会带来上述问题。这样带来的问题就是可能会丢信息,因为c表查询d表数据不存在,就不会发消息,然后d表查c表查不到,相应字段会设为空,那么c表的字段就会丢失。现在数据量少,只有一条数据,丢数据的情况不多见,如果数据很多的话风险就比较大。
三、怎么解决?

  1. 强制走主库方案;
  2. sleep 方案;
  3. 判断主备无延迟方案;
  4. 配合 semi-sync 方案;
  5. 等主库位点方案;
  6. 等 GTID 方案
    另外可以优化的地方就是尽可能减少主从延时的时间,思路基本就是较少大事务、使用基于事务组提交的事务并行复制、调节两个参数binlog_group_commit_sync_delay、binlog_group_commit_sync_no_delay_count
    引用极客时间的文章

binlog_group_commit_sync_delay 参数,表示延迟多少微秒后才调用 fsync;binlog_group_commit_sync_no_delay_count 参数,表示累积多少次以后才调用 fsync。这两个参数是用于故意拉长 binlog 从 write 到 fsync 的时间,以此减少 binlog 的写盘次数。在 MySQL 5.7 的并行复制策略里,它们可以用来制造更多的“同时处于 prepare 阶段的事务”。这样就增加了备库复制的并行度。也就是说,这两个参数,既可以“故意”让主库提交得慢些,又可以让备库执行得快些。在 MySQL 5.7 处理备库延迟的时候,可以考虑调整这两个参数值,来达到提升备库复制并发度的目的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容