Эх сурвалжийг харах

fix:优化binlog监听速度

zqbao 4 сар өмнө
parent
commit
5e25afd86f

+ 10 - 14
services/binlog/binlog.go

@@ -106,6 +106,8 @@ func ListenMysql() {
 	binlogHandler.SetBinlogFileName(fileName, position)
 	c.SetEventHandler(binlogHandler)
 	//c.Run()
+	// 同步到redis
+	go binlogHandler.SyncToRedis()
 
 	pos := mysql.Position{
 		Name: fileName,
@@ -158,21 +160,15 @@ func getBinlogNamePosition() (fileName string, position uint32, err error) {
 	}
 
 	// 从mysql中获取最新的binlog文件名称和位置,名称不一致则以mysql中为准
-	item, tmpErr := binlog.GetShowMaster()
-	if tmpErr != nil {
-		err = tmpErr
-		return
-	}
-	dbFileName := item.File
-	dbPosition := item.Position
-	if fileName != dbFileName {
-		fileName = dbFileName
-		position = dbPosition
-	}
-	if position == 0 {
-		position = dbPosition
+	if fileName == `` || position == 0 {
+		item, tmpErr := binlog.GetShowMaster()
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		fileName = item.File
+		position = item.Position
 	}
-
 	return
 }
 

+ 9 - 4
services/binlog/handler.go

@@ -50,13 +50,18 @@ func (h *EdbEventHandler) OnPosSynced(header *replication.EventHeader, p mysql.P
 	h.fileName = p.Name
 	h.position = p.Pos
 
-	// 旋转binlog日志的时候,需要将当前位置记录到缓存
-	utils.Rc.Put(utils.CACHE_MYSQL_DATA_FILENAME, h.fileName, 31*24*time.Hour)
-	utils.Rc.Put(utils.CACHE_MYSQL_DATA_POSITION, h.position, 31*24*time.Hour)
-
 	return nil
 }
 
+func (h *EdbEventHandler) SyncToRedis() {
+	for {
+		// 旋转binlog日志的时候,需要将当前位置记录到缓存
+		utils.Rc.Put(utils.CACHE_MYSQL_DATA_FILENAME, h.fileName, 31*24*time.Hour)
+		utils.Rc.Put(utils.CACHE_MYSQL_DATA_POSITION, h.position, 31*24*time.Hour)
+		time.Sleep(3 * time.Second)
+	}
+}
+
 func (h *EdbEventHandler) String() string {
 	return "EdbEventHandler"
 }