Example #1
0
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
}