@@ -481,26 +481,17 @@ func (c *Canal) prepareSyncer() error {
481
481
if strings .Contains (c .cfg .Addr , "/" ) {
482
482
cfg .Host = c .cfg .Addr
483
483
} else {
484
- ipv6 := strings .Count (c .cfg .Addr , ":" ) > 1
485
- if ipv6 && ! strings .ContainsAny (c .cfg .Addr , "[]" ) {
486
- return errors .Errorf ("invalid mysql ipv6 addr format %s, must [host]:port" , c .cfg .Addr )
487
- }
488
- lastSep := strings .LastIndex (c .cfg .Addr , ":" )
489
- if ! ipv6 && lastSep == - 1 {
490
- return errors .Errorf ("invalid mysql ipv4 addr format %s, must host:port" , c .cfg .Addr )
491
- }
492
- addr := strings .Trim (c .cfg .Addr [:lastSep ], "[]" )
493
- ip := net .ParseIP (addr )
494
- if ip == nil {
495
- return errors .Errorf ("invalid mysql ip format %s" , addr )
484
+ host , port , err := net .SplitHostPort (c .cfg .Addr )
485
+ if err != nil {
486
+ return errors .Errorf ("invalid mysql addr format %s, must host:port" , c .cfg .Addr )
496
487
}
497
- port , err := strconv .ParseUint (c . cfg . Addr [ lastSep + 1 :] , 10 , 16 )
488
+ portNumber , err := strconv .ParseUint (port , 10 , 16 )
498
489
if err != nil {
499
490
return errors .Trace (err )
500
491
}
501
492
502
- cfg .Host = addr
503
- cfg .Port = uint16 (port )
493
+ cfg .Host = host
494
+ cfg .Port = uint16 (portNumber )
504
495
}
505
496
506
497
c .syncer = replication .NewBinlogSyncer (cfg )
0 commit comments