diff -ur mysql-6.0.11-alpha.orig/sql/mysqld.cc mysql-6.0.11-alpha/sql/mysqld.cc --- mysql-6.0.11-alpha.orig/sql/mysqld.cc 2009-05-11 13:52:22.000000000 +0100 +++ mysql-6.0.11-alpha/sql/mysqld.cc 2009-06-11 06:57:01.648218733 +0100 @@ -30,7 +30,6 @@ #include "sql_audit.h" #include "debug_sync.h" #include - #include "../storage/myisam/ha_myisam.h" #include "rpl_injector.h" @@ -7417,6 +7416,25 @@ return 0; } +static int show_slave_last_heartbeat(THD *thd, SHOW_VAR *var, char *buff) +{ + MYSQL_TIME received_heartbeat_time; + pthread_mutex_lock(&LOCK_active_mi); + if (active_mi) + { + var->type= SHOW_CHAR; + var->value= buff; + pthread_mutex_lock(&active_mi->rli->data_lock); + thd->variables.time_zone->gmt_sec_to_TIME(&received_heartbeat_time, active_mi->last_heartbeat); + my_datetime_to_str(&received_heartbeat_time, buff); + pthread_mutex_unlock(&active_mi->rli->data_lock); + } + else + var->type= SHOW_UNDEF; + pthread_mutex_unlock(&LOCK_active_mi); + return 0; +} + static int show_heartbeat_period(THD *thd, SHOW_VAR *var, char *buff) { pthread_mutex_lock(&LOCK_active_mi); @@ -7800,6 +7818,7 @@ {"Slave_retried_transactions",(char*) &show_slave_retried_trans, SHOW_FUNC}, {"Slave_heartbeat_period", (char*) &show_heartbeat_period, SHOW_FUNC}, {"Slave_received_heartbeats",(char*) &show_slave_received_heartbeats, SHOW_FUNC}, + {"Slave_last_heartbeat", (char*) &show_slave_last_heartbeat, SHOW_FUNC}, {"Slave_running", (char*) &show_slave_running, SHOW_FUNC}, #endif {"Slow_launch_threads", (char*) &slow_launch_threads, SHOW_LONG}, diff -ur mysql-6.0.11-alpha.orig/sql/rpl_mi.cc mysql-6.0.11-alpha/sql/rpl_mi.cc --- mysql-6.0.11-alpha.orig/sql/rpl_mi.cc 2009-05-11 13:52:24.000000000 +0100 +++ mysql-6.0.11-alpha/sql/rpl_mi.cc 2009-06-10 22:59:52.301222840 +0100 @@ -25,7 +25,7 @@ :Rpl_info("I/O"), ssl(0), ssl_verify_server_cert(0), port(MYSQL_PORT), connect_retry(DEFAULT_CONNECT_RETRY), - heartbeat_period(0), received_heartbeats(0), + heartbeat_period(0), received_heartbeats(0), last_heartbeat(0), master_id(0) { host[0] = 0; user[0] = 0; password[0] = 0; diff -ur mysql-6.0.11-alpha.orig/sql/rpl_mi.h mysql-6.0.11-alpha/sql/rpl_mi.h --- mysql-6.0.11-alpha.orig/sql/rpl_mi.h 2009-05-11 13:52:24.000000000 +0100 +++ mysql-6.0.11-alpha/sql/rpl_mi.h 2009-06-10 23:04:41.554223852 +0100 @@ -82,6 +82,7 @@ uint connect_retry; float heartbeat_period; // interface with CHANGE MASTER or master.info ulonglong received_heartbeats; // counter of received heartbeat events + time_t last_heartbeat; DYNAMIC_ARRAY ignore_server_ids; ulong master_id; /* diff -ur mysql-6.0.11-alpha.orig/sql/slave.cc mysql-6.0.11-alpha/sql/slave.cc --- mysql-6.0.11-alpha.orig/sql/slave.cc 2009-05-11 13:52:28.000000000 +0100 +++ mysql-6.0.11-alpha/sql/slave.cc 2009-06-10 23:33:24.762219208 +0100 @@ -3638,6 +3638,7 @@ goto err; } mi->received_heartbeats++; + mi->last_heartbeat= my_time(0); /* compare local and event's versions of log_file, log_pos.