@@ -8,7 +8,9 @@ package binlog
88
99import (
1010 "bytes"
11+ gosql "database/sql"
1112 "github.com/actiontech/dtle/drivers/mysql/common"
13+ "github.com/actiontech/dtle/drivers/mysql/mysql/sql"
1214 "github.com/pingcap/parser/format"
1315 "github.com/pkg/errors"
1416 "github.com/shirou/gopsutil/mem"
@@ -91,6 +93,8 @@ type BinlogReader struct {
9193 maybeSqleContext * sqle.Context
9294 memory * int64
9395 extractedTxCount uint32
96+ db * gosql.DB
97+ serverUUID string
9498}
9599
96100type SqlFilter struct {
@@ -154,9 +158,7 @@ func parseSqlFilter(strs []string) (*SqlFilter, error) {
154158 return s , nil
155159}
156160
157- func NewMySQLReader (execCtx * common.ExecContext , cfg * common.MySQLDriverConfig , logger hclog.Logger ,
158- replicateDoDb []* common.DataSource , sqleContext * sqle.Context , memory * int64 ,
159- ) (binlogReader * BinlogReader , err error ) {
161+ func NewMySQLReader (execCtx * common.ExecContext , cfg * common.MySQLDriverConfig , logger hclog.Logger , replicateDoDb []* common.DataSource , sqleContext * sqle.Context , memory * int64 , db * gosql.DB ) (binlogReader * BinlogReader , err error ) {
160162
161163 sqlFilter , err := parseSqlFilter (cfg .SqlFilter )
162164 if err != nil {
@@ -176,6 +178,12 @@ func NewMySQLReader(execCtx *common.ExecContext, cfg *common.MySQLDriverConfig,
176178 sqlFilter : sqlFilter ,
177179 maybeSqleContext : sqleContext ,
178180 memory : memory ,
181+ db : db ,
182+ }
183+
184+ binlogReader .serverUUID , err = sql .GetServerUUID (db )
185+ if err != nil {
186+ return nil , err
179187 }
180188
181189 for _ , db := range replicateDoDb {
@@ -1041,6 +1049,15 @@ func (b *BinlogReader) DataStreamEvents(entriesChannel chan<- *common.BinlogEntr
10411049 b .currentCoordMutex .Unlock ()
10421050
10431051 if ev .Header .EventType == replication .ROTATE_EVENT {
1052+ serverUUID , err := sql .GetServerUUID (b .db )
1053+ if err != nil {
1054+ return errors .Wrap (err , "on rotate_event. GetServerUUID" )
1055+ }
1056+ if serverUUID != b .serverUUID {
1057+ return fmt .Errorf ("serverUUID changed from %v to %v. job should restart" ,
1058+ b .serverUUID , serverUUID )
1059+ }
1060+
10441061 rotateEvent := ev .Event .(* replication.RotateEvent )
10451062 nextLogName := string (rotateEvent .NextLogName )
10461063 b .currentCoordMutex .Lock ()
0 commit comments