MXS-1703 Move do_show_slave_status() to MariaDBServer
Also took into use the QueryResult helper class.
This commit is contained in:
@ -355,179 +355,6 @@ MXS_MONITORED_SERVER* getSlaveOfNodeId(MXS_MONITORED_SERVER *ptr, long node_id,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MariaDBMonitor::do_show_slave_status(MariaDBServer* serv_info, MXS_MONITORED_SERVER* database)
|
|
||||||
{
|
|
||||||
/** Column positions for SHOW SLAVE STATUS */
|
|
||||||
const size_t MYSQL55_STATUS_MASTER_LOG_POS = 5;
|
|
||||||
const size_t MYSQL55_STATUS_MASTER_LOG_FILE = 6;
|
|
||||||
const size_t MYSQL55_STATUS_IO_RUNNING = 10;
|
|
||||||
const size_t MYSQL55_STATUS_SQL_RUNNING = 11;
|
|
||||||
const size_t MYSQL55_STATUS_MASTER_ID = 39;
|
|
||||||
|
|
||||||
/** Column positions for SHOW SLAVE STATUS */
|
|
||||||
const size_t MARIA10_STATUS_MASTER_LOG_FILE = 7;
|
|
||||||
const size_t MARIA10_STATUS_MASTER_LOG_POS = 8;
|
|
||||||
const size_t MARIA10_STATUS_IO_RUNNING = 12;
|
|
||||||
const size_t MARIA10_STATUS_SQL_RUNNING = 13;
|
|
||||||
const size_t MARIA10_STATUS_MASTER_ID = 41;
|
|
||||||
|
|
||||||
bool rval = true;
|
|
||||||
unsigned int columns;
|
|
||||||
int i_slave_io_running, i_slave_sql_running, i_read_master_log_pos, i_master_server_id, i_master_log_file;
|
|
||||||
const char *query;
|
|
||||||
mysql_server_version server_version = serv_info->version;
|
|
||||||
|
|
||||||
if (server_version == MYSQL_SERVER_VERSION_100)
|
|
||||||
{
|
|
||||||
columns = 42;
|
|
||||||
query = "SHOW ALL SLAVES STATUS";
|
|
||||||
i_slave_io_running = MARIA10_STATUS_IO_RUNNING;
|
|
||||||
i_slave_sql_running = MARIA10_STATUS_SQL_RUNNING;
|
|
||||||
i_master_log_file = MARIA10_STATUS_MASTER_LOG_FILE;
|
|
||||||
i_read_master_log_pos = MARIA10_STATUS_MASTER_LOG_POS;
|
|
||||||
i_master_server_id = MARIA10_STATUS_MASTER_ID;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
columns = server_version == MYSQL_SERVER_VERSION_55 ? 40 : 38;
|
|
||||||
query = "SHOW SLAVE STATUS";
|
|
||||||
i_slave_io_running = MYSQL55_STATUS_IO_RUNNING;
|
|
||||||
i_slave_sql_running = MYSQL55_STATUS_SQL_RUNNING;
|
|
||||||
i_master_log_file = MYSQL55_STATUS_MASTER_LOG_FILE;
|
|
||||||
i_read_master_log_pos = MYSQL55_STATUS_MASTER_LOG_POS;
|
|
||||||
i_master_server_id = MYSQL55_STATUS_MASTER_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
MYSQL_RES* result;
|
|
||||||
int64_t master_server_id = SERVER_ID_UNKNOWN;
|
|
||||||
int nconfigured = 0;
|
|
||||||
int nrunning = 0;
|
|
||||||
|
|
||||||
if (mxs_mysql_query(database->con, query) == 0
|
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
|
||||||
{
|
|
||||||
if (mysql_field_count(database->con) < columns)
|
|
||||||
{
|
|
||||||
mysql_free_result(result);
|
|
||||||
MXS_ERROR("\"%s\" returned less than the expected amount of columns. "
|
|
||||||
"Expected %u columns.", query, columns);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
MYSQL_ROW row = mysql_fetch_row(result);
|
|
||||||
|
|
||||||
if (row)
|
|
||||||
{
|
|
||||||
serv_info->slave_configured = true;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
/* get Slave_IO_Running and Slave_SQL_Running values*/
|
|
||||||
serv_info->slave_status.slave_io_running = strncmp(row[i_slave_io_running], "Yes", 3) == 0;
|
|
||||||
serv_info->slave_status.slave_sql_running = strncmp(row[i_slave_sql_running], "Yes", 3) == 0;
|
|
||||||
|
|
||||||
if (serv_info->slave_status.slave_io_running && serv_info->slave_status.slave_sql_running)
|
|
||||||
{
|
|
||||||
if (nrunning == 0)
|
|
||||||
{
|
|
||||||
/** Only check binlog name for the first running slave */
|
|
||||||
uint64_t read_master_log_pos = atol(row[i_read_master_log_pos]);
|
|
||||||
char* master_log_file = row[i_master_log_file];
|
|
||||||
if (serv_info->slave_status.master_log_file != master_log_file ||
|
|
||||||
read_master_log_pos != serv_info->slave_status.read_master_log_pos)
|
|
||||||
{
|
|
||||||
// IO thread is reading events from the master
|
|
||||||
serv_info->latest_event = time(NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
serv_info->slave_status.master_log_file = master_log_file;
|
|
||||||
serv_info->slave_status.read_master_log_pos = read_master_log_pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
nrunning++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If Slave_IO_Running = Yes, assign the master_id to current server: this allows building
|
|
||||||
* the replication tree, slaves ids will be added to master(s) and we will have at least the
|
|
||||||
* root master server.
|
|
||||||
* Please note, there could be no slaves at all if Slave_SQL_Running == 'No'
|
|
||||||
*/
|
|
||||||
const char* last_io_errno = mxs_mysql_get_value(result, row, "Last_IO_Errno");
|
|
||||||
int io_errno = last_io_errno ? atoi(last_io_errno) : 0;
|
|
||||||
const int connection_errno = 2003;
|
|
||||||
|
|
||||||
if ((io_errno == 0 || io_errno == connection_errno) &&
|
|
||||||
server_version != MYSQL_SERVER_VERSION_51)
|
|
||||||
{
|
|
||||||
/* Get Master_Server_Id */
|
|
||||||
master_server_id = scan_server_id(row[i_master_server_id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (server_version == MYSQL_SERVER_VERSION_100)
|
|
||||||
{
|
|
||||||
const char* beats = mxs_mysql_get_value(result, row, "Slave_received_heartbeats");
|
|
||||||
const char* period = mxs_mysql_get_value(result, row, "Slave_heartbeat_period");
|
|
||||||
const char* using_gtid = mxs_mysql_get_value(result, row, "Using_Gtid");
|
|
||||||
const char* master_host = mxs_mysql_get_value(result, row, "Master_Host");
|
|
||||||
const char* master_port = mxs_mysql_get_value(result, row, "Master_Port");
|
|
||||||
const char* last_io_error = mxs_mysql_get_value(result, row, "Last_IO_Error");
|
|
||||||
const char* last_sql_error = mxs_mysql_get_value(result, row, "Last_SQL_Error");
|
|
||||||
ss_dassert(beats && period && using_gtid && master_host && master_port &&
|
|
||||||
last_io_error && last_sql_error);
|
|
||||||
serv_info->slave_status.master_host = master_host;
|
|
||||||
serv_info->slave_status.master_port = atoi(master_port);
|
|
||||||
serv_info->slave_status.last_error = *last_io_error ? last_io_error :
|
|
||||||
(*last_sql_error ? last_sql_error : "");
|
|
||||||
|
|
||||||
int heartbeats = atoi(beats);
|
|
||||||
if (serv_info->slave_heartbeats < heartbeats)
|
|
||||||
{
|
|
||||||
serv_info->latest_event = time(NULL);
|
|
||||||
serv_info->slave_heartbeats = heartbeats;
|
|
||||||
serv_info->heartbeat_period = atof(period);
|
|
||||||
}
|
|
||||||
if (m_master_gtid_domain >= 0 &&
|
|
||||||
(strcmp(using_gtid, "Current_Pos") == 0 || strcmp(using_gtid, "Slave_Pos") == 0))
|
|
||||||
{
|
|
||||||
const char* gtid_io_pos = mxs_mysql_get_value(result, row, "Gtid_IO_Pos");
|
|
||||||
ss_dassert(gtid_io_pos);
|
|
||||||
serv_info->slave_status.gtid_io_pos = gtid_io_pos[0] != '\0' ?
|
|
||||||
Gtid(gtid_io_pos, m_master_gtid_domain) :
|
|
||||||
Gtid();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
serv_info->slave_status.gtid_io_pos = Gtid();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nconfigured++;
|
|
||||||
row = mysql_fetch_row(result);
|
|
||||||
}
|
|
||||||
while (row);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/** Query returned no rows, replication is not configured */
|
|
||||||
serv_info->slave_configured = false;
|
|
||||||
serv_info->slave_heartbeats = 0;
|
|
||||||
serv_info->slave_status = SlaveStatusInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
serv_info->slave_status.master_server_id = master_server_id;
|
|
||||||
mysql_free_result(result);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mon_report_query_error(database);
|
|
||||||
}
|
|
||||||
|
|
||||||
serv_info->n_slaves_configured = nconfigured;
|
|
||||||
serv_info->n_slaves_running = nrunning;
|
|
||||||
|
|
||||||
return rval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A node in a graph
|
* @brief A node in a graph
|
||||||
*/
|
*/
|
||||||
@ -906,7 +733,7 @@ void MariaDBMonitor::monitor_mysql_db(MariaDBServer* serv_info)
|
|||||||
monitor_clear_pending_status(database, SERVER_SLAVE | SERVER_MASTER | SERVER_RELAY_MASTER |
|
monitor_clear_pending_status(database, SERVER_SLAVE | SERVER_MASTER | SERVER_RELAY_MASTER |
|
||||||
SERVER_SLAVE_OF_EXTERNAL_MASTER);
|
SERVER_SLAVE_OF_EXTERNAL_MASTER);
|
||||||
|
|
||||||
if (do_show_slave_status(serv_info, database))
|
if (serv_info->do_show_slave_status(m_master_gtid_domain))
|
||||||
{
|
{
|
||||||
/* If all configured slaves are running set this node as slave */
|
/* If all configured slaves are running set this node as slave */
|
||||||
if (serv_info->slave_configured && serv_info->n_slaves_running > 0 &&
|
if (serv_info->slave_configured && serv_info->n_slaves_running > 0 &&
|
||||||
@ -960,7 +787,7 @@ MariaDBServer* MariaDBMonitor::update_slave_info(MXS_MONITORED_SERVER* server)
|
|||||||
if (info->slave_status.slave_sql_running &&
|
if (info->slave_status.slave_sql_running &&
|
||||||
update_replication_settings(server, info) &&
|
update_replication_settings(server, info) &&
|
||||||
update_gtids(info) &&
|
update_gtids(info) &&
|
||||||
do_show_slave_status(info, server))
|
info->do_show_slave_status(m_master_gtid_domain))
|
||||||
{
|
{
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -782,7 +782,7 @@ bool MariaDBMonitor::failover_wait_relay_log(MXS_MONITORED_SERVER* new_master, i
|
|||||||
// Update gtid:s first to make sure Gtid_IO_Pos is the more recent value.
|
// Update gtid:s first to make sure Gtid_IO_Pos is the more recent value.
|
||||||
// It doesn't matter here, but is a general rule.
|
// It doesn't matter here, but is a general rule.
|
||||||
query_ok = update_gtids(master_info) &&
|
query_ok = update_gtids(master_info) &&
|
||||||
do_show_slave_status(master_info, new_master);
|
master_info->do_show_slave_status(m_master_gtid_domain);
|
||||||
io_pos_stable = (old_gtid_io_pos == master_info->slave_status.gtid_io_pos);
|
io_pos_stable = (old_gtid_io_pos == master_info->slave_status.gtid_io_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1061,7 +1061,7 @@ bool MariaDBMonitor::wait_cluster_stabilization(MXS_MONITORED_SERVER* new_master
|
|||||||
{
|
{
|
||||||
MXS_MONITORED_SERVER* slave = wait_list[i];
|
MXS_MONITORED_SERVER* slave = wait_list[i];
|
||||||
MariaDBServer* slave_info = get_server_info(slave);
|
MariaDBServer* slave_info = get_server_info(slave);
|
||||||
if (update_gtids(slave_info) && do_show_slave_status(slave_info, slave))
|
if (update_gtids(slave_info) && slave_info->do_show_slave_status(m_master_gtid_domain))
|
||||||
{
|
{
|
||||||
if (!slave_info->slave_status.last_error.empty())
|
if (!slave_info->slave_status.last_error.empty())
|
||||||
{
|
{
|
||||||
|
|||||||
@ -217,7 +217,6 @@ private:
|
|||||||
bool server_is_excluded(const MXS_MONITORED_SERVER* server);
|
bool server_is_excluded(const MXS_MONITORED_SERVER* server);
|
||||||
bool is_candidate_better(const MariaDBServer* current_best_info, const MariaDBServer* candidate_info);
|
bool is_candidate_better(const MariaDBServer* current_best_info, const MariaDBServer* candidate_info);
|
||||||
MariaDBServer* update_slave_info(MXS_MONITORED_SERVER* server);
|
MariaDBServer* update_slave_info(MXS_MONITORED_SERVER* server);
|
||||||
bool do_show_slave_status(MariaDBServer* serv_info, MXS_MONITORED_SERVER* database);
|
|
||||||
bool update_replication_settings(MXS_MONITORED_SERVER *database, MariaDBServer* info);
|
bool update_replication_settings(MXS_MONITORED_SERVER *database, MariaDBServer* info);
|
||||||
void init_server_info();
|
void init_server_info();
|
||||||
bool slave_receiving_events();
|
bool slave_receiving_events();
|
||||||
|
|||||||
@ -131,3 +131,163 @@ std::auto_ptr<QueryResult> MariaDBServer::execute_query(const string& query)
|
|||||||
}
|
}
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MariaDBServer::do_show_slave_status(int64_t gtid_domain)
|
||||||
|
{
|
||||||
|
/** Column positions for SHOW SLAVE STATUS */
|
||||||
|
const size_t MYSQL55_STATUS_MASTER_LOG_POS = 5;
|
||||||
|
const size_t MYSQL55_STATUS_MASTER_LOG_FILE = 6;
|
||||||
|
const size_t MYSQL55_STATUS_IO_RUNNING = 10;
|
||||||
|
const size_t MYSQL55_STATUS_SQL_RUNNING = 11;
|
||||||
|
const size_t MYSQL55_STATUS_MASTER_ID = 39;
|
||||||
|
|
||||||
|
bool rval = true;
|
||||||
|
unsigned int columns;
|
||||||
|
int i_slave_io_running, i_slave_sql_running, i_read_master_log_pos, i_master_server_id, i_master_log_file;
|
||||||
|
int i_last_io_errno, i_last_io_error, i_last_sql_error, i_slave_rec_hbs, i_slave_hb_period;
|
||||||
|
int i_master_host, i_master_port, i_using_gtid, i_gtid_io_pos;
|
||||||
|
const char *query;
|
||||||
|
mysql_server_version server_version = version;
|
||||||
|
|
||||||
|
if (server_version == MYSQL_SERVER_VERSION_100)
|
||||||
|
{
|
||||||
|
columns = 42;
|
||||||
|
query = "SHOW ALL SLAVES STATUS";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
columns = server_version == MYSQL_SERVER_VERSION_55 ? 40 : 38;
|
||||||
|
query = "SHOW SLAVE STATUS";
|
||||||
|
i_slave_io_running = MYSQL55_STATUS_IO_RUNNING;
|
||||||
|
i_slave_sql_running = MYSQL55_STATUS_SQL_RUNNING;
|
||||||
|
i_master_log_file = MYSQL55_STATUS_MASTER_LOG_FILE;
|
||||||
|
i_read_master_log_pos = MYSQL55_STATUS_MASTER_LOG_POS;
|
||||||
|
i_master_server_id = MYSQL55_STATUS_MASTER_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t master_server_id = SERVER_ID_UNKNOWN;
|
||||||
|
int nconfigured = 0;
|
||||||
|
int nrunning = 0;
|
||||||
|
|
||||||
|
auto result = execute_query(query);
|
||||||
|
if (result.get() == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if(result->get_column_count() < columns)
|
||||||
|
{
|
||||||
|
MXS_ERROR("\"%s\" returned less than the expected amount of columns. "
|
||||||
|
"Expected %u columns.", query, columns);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server_version == MYSQL_SERVER_VERSION_100)
|
||||||
|
{
|
||||||
|
i_slave_io_running = result->get_col_index("Slave_IO_Running");
|
||||||
|
i_slave_sql_running = result->get_col_index("Slave_SQL_Running");
|
||||||
|
i_master_log_file = result->get_col_index("Master_Log_File");
|
||||||
|
i_read_master_log_pos = result->get_col_index("Read_Master_Log_Pos");
|
||||||
|
i_master_server_id = result->get_col_index("Master_Server_Id");
|
||||||
|
i_slave_rec_hbs = result->get_col_index("Slave_received_heartbeats");
|
||||||
|
i_slave_hb_period = result->get_col_index("Slave_heartbeat_period");
|
||||||
|
i_master_host = result->get_col_index("Master_Host");
|
||||||
|
i_master_port = result->get_col_index("Master_Port");
|
||||||
|
i_using_gtid = result->get_col_index("Using_Gtid");
|
||||||
|
i_gtid_io_pos = result->get_col_index("Gtid_IO_Pos");
|
||||||
|
i_last_io_errno = result->get_col_index("Last_IO_Errno");
|
||||||
|
i_last_io_error = result->get_col_index("Last_IO_Error");
|
||||||
|
i_last_sql_error = result->get_col_index("Last_SQL_Error");
|
||||||
|
}
|
||||||
|
// TODO: Add other versions here once it's certain the column names are the same. Better yet, save the
|
||||||
|
// indexes to object data so they don't need to be updated every query.
|
||||||
|
|
||||||
|
while (result->next_row())
|
||||||
|
{
|
||||||
|
nconfigured++;
|
||||||
|
/* get Slave_IO_Running and Slave_SQL_Running values*/
|
||||||
|
slave_status.slave_io_running = (result->get_string(i_slave_io_running) == "Yes");
|
||||||
|
slave_status.slave_sql_running = (result->get_string(i_slave_sql_running) == "Yes");
|
||||||
|
|
||||||
|
if (slave_status.slave_io_running && slave_status.slave_sql_running)
|
||||||
|
{
|
||||||
|
if (nrunning == 0)
|
||||||
|
{
|
||||||
|
/** Only check binlog name for the first running slave */
|
||||||
|
string master_log_file = result->get_string(i_master_log_file);
|
||||||
|
uint64_t read_master_log_pos = result->get_int(i_read_master_log_pos);
|
||||||
|
if (slave_status.master_log_file != master_log_file ||
|
||||||
|
slave_status.read_master_log_pos != read_master_log_pos)
|
||||||
|
{
|
||||||
|
// IO thread is reading events from the master
|
||||||
|
latest_event = time(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
slave_status.master_log_file = master_log_file;
|
||||||
|
slave_status.read_master_log_pos = read_master_log_pos;
|
||||||
|
}
|
||||||
|
nrunning++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If Slave_IO_Running = Yes, assign the master_id to current server: this allows building
|
||||||
|
* the replication tree, slaves ids will be added to master(s) and we will have at least the
|
||||||
|
* root master server.
|
||||||
|
* Please note, there could be no slaves at all if Slave_SQL_Running == 'No'
|
||||||
|
*/
|
||||||
|
int64_t last_io_errno = result->get_int(i_last_io_errno);
|
||||||
|
int io_errno = last_io_errno;
|
||||||
|
const int connection_errno = 2003;
|
||||||
|
|
||||||
|
if ((io_errno == 0 || io_errno == connection_errno) &&
|
||||||
|
server_version != MYSQL_SERVER_VERSION_51)
|
||||||
|
{
|
||||||
|
/* Get Master_Server_Id */
|
||||||
|
master_server_id = scan_server_id(result->get_string(i_master_server_id).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server_version == MYSQL_SERVER_VERSION_100)
|
||||||
|
{
|
||||||
|
slave_status.master_host = result->get_string(i_master_host);
|
||||||
|
slave_status.master_port = result->get_int(i_master_port);
|
||||||
|
|
||||||
|
string last_io_error = result->get_string(i_last_io_error);
|
||||||
|
string last_sql_error = result->get_string(i_last_sql_error);
|
||||||
|
slave_status.last_error = !last_io_error.empty() ? last_io_error : last_sql_error;
|
||||||
|
|
||||||
|
int heartbeats = result->get_int(i_slave_rec_hbs);
|
||||||
|
if (slave_heartbeats < heartbeats)
|
||||||
|
{
|
||||||
|
latest_event = time(NULL);
|
||||||
|
slave_heartbeats = heartbeats;
|
||||||
|
heartbeat_period = result->get_int(i_slave_hb_period);
|
||||||
|
}
|
||||||
|
string using_gtid = result->get_string(i_using_gtid);
|
||||||
|
if (gtid_domain >= 0 && (using_gtid == "Current_Pos" || using_gtid == "Slave_Pos"))
|
||||||
|
{
|
||||||
|
string gtid_io_pos = result->get_string(i_gtid_io_pos);
|
||||||
|
slave_status.gtid_io_pos = !gtid_io_pos.empty() ?
|
||||||
|
Gtid(gtid_io_pos.c_str(), gtid_domain) : Gtid();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
slave_status.gtid_io_pos = Gtid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nconfigured > 0)
|
||||||
|
{
|
||||||
|
slave_configured = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/** Query returned no rows, replication is not configured */
|
||||||
|
slave_configured = false;
|
||||||
|
slave_heartbeats = 0;
|
||||||
|
slave_status = SlaveStatusInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
slave_status.master_server_id = master_server_id;
|
||||||
|
n_slaves_configured = nconfigured;
|
||||||
|
n_slaves_running = nrunning;
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|||||||
@ -147,4 +147,12 @@ public:
|
|||||||
* results are assumed unique.
|
* results are assumed unique.
|
||||||
*/
|
*/
|
||||||
std::auto_ptr<QueryResult> execute_query(const std::string& query);
|
std::auto_ptr<QueryResult> execute_query(const std::string& query);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update server slave connection information.
|
||||||
|
*
|
||||||
|
* @param gtid_domain Which gtid domain should be parsed.
|
||||||
|
* @return True on success
|
||||||
|
*/
|
||||||
|
bool do_show_slave_status(int64_t gtid_domain);
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user