@@ -8,7 +8,9 @@ package binlog
8
8
9
9
import (
10
10
"bytes"
11
+ gosql "database/sql"
11
12
"github.com/actiontech/dtle/drivers/mysql/common"
13
+ "github.com/actiontech/dtle/drivers/mysql/mysql/sql"
12
14
"github.com/pingcap/parser/format"
13
15
"github.com/pkg/errors"
14
16
"github.com/shirou/gopsutil/mem"
@@ -91,6 +93,8 @@ type BinlogReader struct {
91
93
maybeSqleContext * sqle.Context
92
94
memory * int64
93
95
extractedTxCount uint32
96
+ db * gosql.DB
97
+ serverUUID string
94
98
}
95
99
96
100
type SqlFilter struct {
@@ -154,9 +158,7 @@ func parseSqlFilter(strs []string) (*SqlFilter, error) {
154
158
return s , nil
155
159
}
156
160
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 ) {
160
162
161
163
sqlFilter , err := parseSqlFilter (cfg .SqlFilter )
162
164
if err != nil {
@@ -176,6 +178,12 @@ func NewMySQLReader(execCtx *common.ExecContext, cfg *common.MySQLDriverConfig,
176
178
sqlFilter : sqlFilter ,
177
179
maybeSqleContext : sqleContext ,
178
180
memory : memory ,
181
+ db : db ,
182
+ }
183
+
184
+ binlogReader .serverUUID , err = sql .GetServerUUID (db )
185
+ if err != nil {
186
+ return nil , err
179
187
}
180
188
181
189
for _ , db := range replicateDoDb {
@@ -1041,6 +1049,15 @@ func (b *BinlogReader) DataStreamEvents(entriesChannel chan<- *common.BinlogEntr
1041
1049
b .currentCoordMutex .Unlock ()
1042
1050
1043
1051
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
+
1044
1061
rotateEvent := ev .Event .(* replication.RotateEvent )
1045
1062
nextLogName := string (rotateEvent .NextLogName )
1046
1063
b .currentCoordMutex .Lock ()
0 commit comments