Skip to content

Commit b089cc3

Browse files
committed
update failover
1 parent 36e0e4c commit b089cc3

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ mysql -h127.0.0.1 -P4000 -uroot -p
123123
//Becuase empty handler does nothing, so here the MySQL client can only connect the proxy server. :-)
124124
```
125125

126+
## Failover
127+
128+
Failover supports to promote a new master and let other slaves replicate from it automatically when the old master was down.
129+
130+
126131
## Feedback
127132

128133
go-mysql is still in development, your feedback is very welcome.

failover/failover.go

+19-9
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,10 @@ import (
1616
//
1717
func Failover(slaves []*Server) ([]*Server, error) {
1818
// First check slaves use gtid or not
19-
gtidMode, err := slaves[0].GTIDUsed()
19+
gtidMode, err := CheckGTIDMode(slaves)
2020
if err != nil {
2121
return nil, err
2222
}
23-
for i := 1; i < len(slaves); i++ {
24-
mode, err := slaves[i].GTIDUsed()
25-
if err != nil {
26-
return nil, err
27-
} else if gtidMode != mode {
28-
return nil, fmt.Errorf("%s use GTID %s, but %s use GTID %s", slaves[0].Addr, gtidMode, slaves[i].Addr, mode)
29-
}
30-
}
3123

3224
var h Handler
3325

@@ -63,3 +55,21 @@ func Failover(slaves []*Server) ([]*Server, error) {
6355

6456
return slaves, nil
6557
}
58+
59+
// Check slaves have same GTID used or not
60+
func CheckGTIDMode(slaves []*Server) (string, error) {
61+
gtidMode, err := slaves[0].GTIDMode()
62+
if err != nil {
63+
return GTIDModeOff, err
64+
}
65+
for i := 1; i < len(slaves); i++ {
66+
mode, err := slaves[i].GTIDMode()
67+
if err != nil {
68+
return GTIDModeOff, err
69+
} else if gtidMode != mode {
70+
return GTIDModeOff, fmt.Errorf("%s use GTID %s, but %s use GTID %s", slaves[0].Addr, gtidMode, slaves[i].Addr, mode)
71+
}
72+
}
73+
74+
return gtidMode, nil
75+
}

failover/server.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (s *Server) ResetMaster() error {
102102
return err
103103
}
104104

105-
func (s *Server) GTIDUsed() (string, error) {
105+
func (s *Server) GTIDMode() (string, error) {
106106
r, err := s.Execute("SELECT @@gtid_mode")
107107
if err != nil {
108108
return GTIDModeOff, err

0 commit comments

Comments
 (0)