成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用過(guò)MySOL的Binlog嗎?看看如何用Binlog排查阿里開(kāi)源項(xiàng)目Otter的問(wèn)題

數(shù)據(jù)庫(kù) MySQL
MySQL的binlog相信大家都有所耳聞,但是可能沒(méi)有真正日常使用過(guò)。因此,本文結(jié)合一個(gè)otter小坑的排查案例,來(lái)分享下binlog的日常使用方式。

 MySQL的binlog相信大家都有所耳聞,但是可能沒(méi)有真正日常使用過(guò)。

因此,本文結(jié)合一個(gè)otter小坑的排查案例,來(lái)分享下binlog的日常使用方式。

重點(diǎn)了解下:

  • binlog的導(dǎo)出方式
  • binlog的解析方式
  • 結(jié)合案例分享下開(kāi)源項(xiàng)目otter的一個(gè)小坑

1.案例背景

某個(gè)周末突然收到報(bào)警,發(fā)現(xiàn)線(xiàn)上多云數(shù)據(jù)庫(kù)的數(shù)據(jù)同步任務(wù)掛起,顯示日志寫(xiě)入數(shù)據(jù)失敗。


錯(cuò)誤原因非常明顯:

唯一索引沖突。

查看了一下源庫(kù)的數(shù)據(jù)內(nèi)容,確實(shí)已經(jīng)update完畢。而目標(biāo)庫(kù)的數(shù)據(jù)內(nèi)容,確實(shí)存在沖突導(dǎo)致無(wú)法update。

2.排查過(guò)程

這個(gè)數(shù)據(jù)同步任務(wù),使用了阿里開(kāi)源的數(shù)據(jù)庫(kù)同步項(xiàng)目otter。難道遇到了什么bug?

otter項(xiàng)目是阿里巴巴開(kāi)源的數(shù)據(jù)庫(kù)同步系統(tǒng)。

基于數(shù)據(jù)庫(kù)增量日志解析,準(zhǔn)實(shí)時(shí)同步到本機(jī)房或異地機(jī)房的mysql/oracle數(shù)據(jù)庫(kù)的一個(gè)分布式數(shù)據(jù)庫(kù)同步系統(tǒng)。

直接開(kāi)始排查問(wèn)題。

2.1 表結(jié)構(gòu)是否一致

為什么源庫(kù)沒(méi)有沖突,目標(biāo)庫(kù)會(huì)有沖突呢?是不是表結(jié)構(gòu)不一致?或者是源庫(kù)發(fā)生了表結(jié)構(gòu)變更沒(méi)有同步到目標(biāo)庫(kù)?

確認(rèn)了下源庫(kù)的表結(jié)構(gòu)和目標(biāo)庫(kù)表結(jié)構(gòu)是一致的,且都有對(duì)應(yīng)的唯一索引udx_position。

2.2 排查源庫(kù)binlog

那源庫(kù)到底是怎么更新成功的?只能撈一下binlog了。

首先導(dǎo)出線(xiàn)上正在使用的binlog文件。

在數(shù)據(jù)庫(kù)上執(zhí)行

  1. flush logs 

這個(gè)命令會(huì)關(guān)閉當(dāng)前正在寫(xiě)入的binlog文件,然后生成一個(gè)序號(hào)加1的新的binlog文件讓mysql server繼續(xù)使用。

等待幾分鐘,讓當(dāng)前的binlog落盤(pán)為日志文件,本案例中為xxxx_binlog_mysqlbin.000005。

然后下載到本地。

通過(guò)mysqlbinlog命令解析,輸出為指定文件xxx.binlog,如下:

  1. mysqlbinlog  --start-datetime='2020-11-20 18:17:00' --stop-datetime='2020-11-20 18:21:01' --base64-output=decode-rows -v -d db xxxx_binlog_mysqlbin.000005 > xxx.binlog 
  • binlog格式binlog_format采用row模式。僅保存記錄被修改細(xì)節(jié),不記錄sql語(yǔ)句上下文相關(guān)信息優(yōu)點(diǎn):能非常清晰的記錄下每行數(shù)據(jù)的修改細(xì)節(jié),不需要記錄上下文相關(guān)信息,因此不會(huì)發(fā)生某些特定情況下的procedure、function、及trigger的調(diào)用觸發(fā)無(wú)法被正確復(fù)制的問(wèn)題,任何情況都可以被復(fù)制,且能加快從庫(kù)重放日志的效率,保證從庫(kù)數(shù)據(jù)的一致性。
  • 通過(guò) --start-datatime和--stop-datetime指定解析的起止時(shí)間
  • row模式生成的sql編碼需要解碼,不能用常規(guī)的辦法去生成,需要加上相應(yīng)的參數(shù)(--base64-output=decode-rows -v)才能顯示出sql語(yǔ)句

binlog的內(nèi)容解析后sql的過(guò)程如下(為了更好地看清過(guò)程,這里不展示binlog原文,而是一個(gè)邏輯過(guò)程):


我們能清楚地看到,源庫(kù)通過(guò)一個(gè)事務(wù)中,交換position(唯一索引的列)的值,達(dá)到更新唯一索引而不造成沖突的目的。

那目標(biāo)庫(kù)為什么會(huì)沖突呢?

2.3 查看目標(biāo)庫(kù)的sql審計(jì)

由于數(shù)據(jù)同步失敗掛起,所以目標(biāo)庫(kù)的同步數(shù)據(jù)暫時(shí)不會(huì)寫(xiě)入對(duì)應(yīng)的binlog記錄。

因此,我們需要通過(guò)sql審計(jì)來(lái)查看目標(biāo)庫(kù)的寫(xiě)入情況。

這里同樣展示sql審計(jì)中撈出的相關(guān)過(guò)程:


Oh~ My~ God!

事務(wù)中間的update交換過(guò)程居然被合并了!!

所以造成了唯一索引沖突,更新失敗。

3.求證

重新去翻了一遍otter的wiki,看到了關(guān)于《otter數(shù)據(jù)入庫(kù)算法》說(shuō)明。

https://github.com/alibaba/otter/wiki/Otter%E6%95%B0%E6%8D%AE%E5%85%A5%E5%BA%93%E7%AE%97%E6%B3%95


確實(shí)存在操作合并的情況。

這樣做許多好處:

  • insert/行記錄update 執(zhí)行merge sql,解決重復(fù)數(shù)據(jù)執(zhí)行
  • 合并算法執(zhí)行后,單pk主鍵只有一條記錄,減少并行l(wèi)oad算法的復(fù)雜性(比如batch合并,并行/串行等處理)
  • 同步速度相比于mysql的復(fù)制,拋棄了強(qiáng)一致性,約有5倍左右的性能提升

找了下源碼,定位到DbLoadAction類(lèi)


令人遺憾的是,我們發(fā)現(xiàn)竟然沒(méi)有開(kāi)關(guān)可以控制。

4.解決方案。

到上面基本已經(jīng)水落石出,找到了問(wèn)題的根本原因。由于otter對(duì)事務(wù)內(nèi)的update操作進(jìn)行了合并,導(dǎo)致了目標(biāo)庫(kù)唯一索引沖突。

那怎么解決呢?

看到文檔上有這么一句話(huà)


那么,對(duì)應(yīng)到這個(gè)案例,或者說(shuō)其他唯一索引的變更,只能通過(guò) 先刪除,再插入,而不是通過(guò)update進(jìn)行交換。

 

 

責(zé)任編輯:姜華 來(lái)源: 阿丸筆記
相關(guān)推薦

2019-05-07 09:31:41

TiDBMySQL數(shù)據(jù)

2021-07-12 08:06:32

Java

2023-01-04 08:14:48

binlog參數(shù)生效

2020-04-23 10:07:45

工具IDEA阿里巴巴

2021-06-30 13:57:07

Arthas JVMTI

2010-05-18 12:24:16

MySQL binlo

2017-09-13 18:30:38

數(shù)據(jù)庫(kù)數(shù)據(jù)異構(gòu)BINLOG+MQ

2025-01-22 16:00:00

MySQL數(shù)據(jù)庫(kù)Binlog

2020-03-23 10:06:05

工具代碼開(kāi)發(fā)

2024-03-14 14:18:58

MySQL業(yè)務(wù)設(shè)計(jì)事務(wù)

2019-11-01 09:23:31

開(kāi)源項(xiàng)目UI

2023-06-08 07:37:35

MySQLbinlog機(jī)制

2018-05-14 13:51:39

RDS Binlog架構(gòu)Kafka集群

2021-06-28 08:00:00

Python開(kāi)發(fā)編程語(yǔ)言

2023-04-11 08:26:34

2019-02-26 09:42:14

開(kāi)源技術(shù) 趨勢(shì)

2022-04-06 10:35:22

開(kāi)源項(xiàng)目阿里巴巴

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2022-09-23 13:24:21

MySQL數(shù)據(jù)庫(kù)

2019-08-16 14:18:38

CPU故障
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产偷录叫床高潮录音 | 91精品国产色综合久久不卡蜜臀 | 欧美xxxx色视频在线观看免费 | 精品日韩一区 | 久久国产精品网站 | 国产专区免费 | 妖精视频一区二区三区 | 中文字幕欧美日韩一区 | 久久久久久久久91 | 国产欧美日韩精品一区二区三区 | 黄色片免费 | 亚洲精品无| 99久久精品国产一区二区三区 | 久久精品国产亚洲一区二区三区 | 亚洲一区二区久久 | 日本aaaa| 91精品久久久久久久久久入口 | 欧美一级电影免费观看 | 精品日韩一区 | 中文字幕第十一页 | 欧美日韩一区二区三区四区五区 | 欧美精品一区三区 | 天堂亚洲网| 亚洲欧美激情国产综合久久久 | 18成人在线观看 | 国产精品亚洲欧美日韩一区在线 | 久一精品 | 日韩国产中文字幕 | 久久视频一区 | 成人在线播放网站 | 亚洲视频在线观看免费 | 国产一区二区三区在线看 | 国产日韩精品视频 | 欧美精品三区 | 久久精品亚洲 | 国产伦精品一区二区三区四区视频 | 久久网站黄 | 国产成人精品一区二区三区在线 | 日韩精品二区 | av网站在线看 | 免费午夜视频在线观看 |