func (mysqld *Mysqld) SlaveStatus() (*proto.ReplicationPosition, error) { fields, err := mysqld.slaveStatus() if err != nil { return nil, err } pos := new(proto.ReplicationPosition) // Use Relay_Master_Log_File for the SQL thread postion. pos.MasterLogFile = fields["Relay_Master_Log_File"] pos.MasterLogFileIo = fields["Master_Log_File"] temp, _ := strconv.ParseUint(fields["Exec_Master_Log_Pos"], 10, 0) pos.MasterLogPosition = uint(temp) temp, _ = strconv.ParseUint(fields["Read_Master_Log_Pos"], 10, 0) pos.MasterLogPositionIo = uint(temp) pos.MasterLogGroupId, _ = strconv.ParseInt(fields["Exec_Master_Group_ID"], 10, 0) if fields["Slave_IO_Running"] == "Yes" && fields["Slave_SQL_Running"] == "Yes" { temp, _ = strconv.ParseUint(fields["Seconds_Behind_Master"], 10, 0) pos.SecondsBehindMaster = uint(temp) } else { // replications isn't running - report it as invalid since it won't resolve itself. pos.SecondsBehindMaster = proto.InvalidLagSeconds } return pos, nil }