Skip to content

Commit d6a364d

Browse files
authored
Merge pull request #8 from takaidohigasi/fix-replicaiton-status-aquisition-bug
fix MySQL replication status aquisition bug
2 parents 5b33113 + b5dcee0 commit d6a364d

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

lib/mysql.go

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -295,27 +295,39 @@ func fetchShowVariablesBackwardCompatibile(stat map[string]float64) error {
295295
return nil
296296
}
297297

298+
// This code does not work with multi-source replication.
298299
func (m *MySQLPlugin) fetchShowSlaveStatus(db *sql.DB, stat map[string]float64) error {
299300
rows, err := db.Query("show slave status")
300301
if err != nil {
301302
return fmt.Errorf("FetchMetrics (Slave Status): %w", err)
302303
}
303304
defer rows.Close()
304305
for rows.Next() {
305-
var (
306-
variableName string
307-
value *string
308-
)
309-
if err := rows.Scan(&variableName, &value); err != nil {
306+
columns, err := rows.ColumnTypes()
307+
if err != nil {
310308
return fmt.Errorf("FetchMetrics (Slave Status): %w", err)
311309
}
312-
if variableName == "Seconds_Behind_Master" {
313-
if value != nil {
314-
f, err := atof(*value)
315-
if err != nil {
316-
return err
310+
311+
valuePtrs := make([]interface{}, len(columns))
312+
values := make([]sql.RawBytes, len(columns))
313+
for i := range values {
314+
values[i] = sql.RawBytes{}
315+
valuePtrs[i] = &values[i]
316+
}
317+
if err = rows.Scan(valuePtrs...); err != nil {
318+
return fmt.Errorf("FetchMetrics (Slave Status): %w", err)
319+
}
320+
for i, column := range columns {
321+
variableName := column.Name()
322+
value := values[i]
323+
if variableName == "Seconds_Behind_Master" {
324+
if value != nil {
325+
f, err := atof(string(value))
326+
if err != nil {
327+
return err
328+
}
329+
stat["Seconds_Behind_Master"] = f
317330
}
318-
stat["Seconds_Behind_Master"] = f
319331
}
320332
}
321333
}

0 commit comments

Comments
 (0)