Skip to content

Commit e911007

Browse files
committed
Add GTID-based replication to example program
1 parent 12a829d commit e911007

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

cmd/go-mysqlbinlog/main.go

+22-4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var flavor = flag.String("flavor", "mysql", "Flavor: mysql or mariadb")
2424

2525
var file = flag.String("file", "", "Binlog filename")
2626
var pos = flag.Int("pos", 4, "Binlog position")
27+
var gtid = flag.String("gtid", "", "Binlog GTID set that this slave has executed")
2728

2829
var semiSync = flag.Bool("semisync", false, "Support semi sync")
2930
var backupPath = flag.String("backup_path", "", "backup path to store binlog files")
@@ -57,10 +58,27 @@ func main() {
5758
return
5859
}
5960
} else {
60-
s, err := b.StartSync(pos)
61-
if err != nil {
62-
fmt.Printf("Start sync error: %v\n", errors.ErrorStack(err))
63-
return
61+
var (
62+
s *replication.BinlogStreamer
63+
err error
64+
)
65+
if len(*gtid) > 0 {
66+
gset, err := mysql.ParseGTIDSet(*flavor, *gtid)
67+
if err != nil {
68+
fmt.Printf("Failed to parse gtid %s with flavor %s, error: %v\n",
69+
*gtid, *flavor, errors.ErrorStack(err))
70+
}
71+
s, err = b.StartSyncGTID(gset)
72+
if err != nil {
73+
fmt.Printf("Start sync by GTID error: %v\n", errors.ErrorStack(err))
74+
return
75+
}
76+
} else {
77+
s, err = b.StartSync(pos)
78+
if err != nil {
79+
fmt.Printf("Start sync error: %v\n", errors.ErrorStack(err))
80+
return
81+
}
6482
}
6583

6684
for {

0 commit comments

Comments
 (0)