diff --git a/server/modules/monitor/mariadbmon/cluster_discovery.cc b/server/modules/monitor/mariadbmon/cluster_discovery.cc index dbfd1650a..109f0510d 100644 --- a/server/modules/monitor/mariadbmon/cluster_discovery.cc +++ b/server/modules/monitor/mariadbmon/cluster_discovery.cc @@ -25,120 +25,6 @@ static bool check_replicate_wild_ignore_table(MXS_MONITORED_SERVER* database); static const char HB_TABLE_NAME[] = "maxscale_schema.replication_heartbeat"; static bool report_version_err = true; -/** - * Build the replication tree for a MySQL 5.1 cluster - * - * This function queries each server with SHOW SLAVE HOSTS to determine which servers have slaves replicating - * from them. - * - * @return Lowest server ID master in the monitor - */ -MXS_MONITORED_SERVER* MariaDBMonitor::build_mysql51_replication_tree() -{ - /** Column positions for SHOW SLAVE HOSTS */ - const size_t SLAVE_HOSTS_SERVER_ID = 0; - const size_t SLAVE_HOSTS_HOSTNAME = 1; - const size_t SLAVE_HOSTS_PORT = 2; - - MXS_MONITORED_SERVER* database = m_monitor_base->monitored_servers; - MXS_MONITORED_SERVER *ptr, *rval = NULL; - int i; - - while (database) - { - bool ismaster = false; - MYSQL_RES* result; - MYSQL_ROW row; - int nslaves = 0; - if (database->con) - { - if (mxs_mysql_query(database->con, "SHOW SLAVE HOSTS") == 0 - && (result = mysql_store_result(database->con)) != NULL) - { - if (mysql_field_count(database->con) < 4) - { - mysql_free_result(result); - MXS_ERROR("\"SHOW SLAVE HOSTS\" " - "returned less than the expected amount of columns. " - "Expected 4 columns."); - return NULL; - } - - if (mysql_num_rows(result) > 0) - { - ismaster = true; - while (nslaves < MAX_NUM_SLAVES && (row = mysql_fetch_row(result))) - { - /* get Slave_IO_Running and Slave_SQL_Running values*/ - database->server->slaves[nslaves] = atol(row[SLAVE_HOSTS_SERVER_ID]); - nslaves++; - MXS_DEBUG("Found slave at %s:%s", row[SLAVE_HOSTS_HOSTNAME], row[SLAVE_HOSTS_PORT]); - } - database->server->slaves[nslaves] = 0; - } - - mysql_free_result(result); - } - else - { - mon_report_query_error(database); - } - - /* Set the Slave Role */ - if (ismaster) - { - m_master = get_server_info(database); - - MXS_DEBUG("Master server found at [%s]:%d with %d slaves", - database->server->name, - database->server->port, - nslaves); - - monitor_set_pending_status(database, SERVER_MASTER); - database->server->depth = 0; // Add Depth 0 for Master - - if (rval == NULL || rval->server->node_id > database->server->node_id) - { - rval = database; - } - } - } - database = database->next; - } - - database = m_monitor_base->monitored_servers; - - /** Set master server IDs */ - while (database) - { - ptr = m_monitor_base->monitored_servers; - - while (ptr) - { - for (i = 0; ptr->server->slaves[i]; i++) - { - if (ptr->server->slaves[i] == database->server->node_id) - { - database->server->master_id = ptr->server->node_id; - database->server->depth = 1; // Add Depth 1 for Slave - break; - } - } - ptr = ptr->next; - } - if (SERVER_IS_SLAVE(database->server) && - (database->server->master_id <= 0 || - database->server->master_id != m_master->m_server_base->server->node_id)) - { - - monitor_set_pending_status(database, SERVER_SLAVE); - monitor_set_pending_status(database, SERVER_SLAVE_OF_EXTERNAL_MASTER); - } - database = database->next; - } - return rval; -} - /** * This function computes the replication tree from a set of monitored servers and returns the root server * with SERVER_MASTER bit. The tree is computed even for servers in 'maintenance' mode. @@ -649,41 +535,35 @@ void MariaDBMonitor::monitor_database(MariaDBServer* serv_info) uint64_t version_num = server_get_version(database->server); if (version_num >= 100000) { - serv_info->m_version = MYSQL_SERVER_VERSION_100; + serv_info->m_version = MariaDBServer::MARIADB_VERSION_100; } else if (version_num >= 5 * 10000 + 5 * 100) { - serv_info->m_version = MYSQL_SERVER_VERSION_55; + serv_info->m_version = MariaDBServer::MARIADB_VERSION_55; } else { - serv_info->m_version = MYSQL_SERVER_VERSION_51; + serv_info->m_version = MariaDBServer::MARIADB_VERSION_UNKNOWN; } /* Query a few settings. */ serv_info->read_server_variables(); /* If gtid domain exists and server is 10.0, update gtid:s */ - if (m_master_gtid_domain >= 0 && serv_info->m_version == MYSQL_SERVER_VERSION_100) + if (m_master_gtid_domain >= 0 && serv_info->m_version == MariaDBServer::MARIADB_VERSION_100) { serv_info->update_gtids(); } - /* Check for MariaDB 10.x.x and get status for multi-master replication */ - if (serv_info->m_version == MYSQL_SERVER_VERSION_100 || serv_info->m_version == MYSQL_SERVER_VERSION_55) + + /* Check for valid server version */ + if (serv_info->m_version == MariaDBServer::MARIADB_VERSION_100 || + serv_info->m_version == MariaDBServer::MARIADB_VERSION_55) { monitor_mysql_db(serv_info); } - else + else if (report_version_err) { - if (m_mysql51_replication) - { - monitor_mysql_db(serv_info); - } - else if (report_version_err) - { - report_version_err = false; - MXS_ERROR("MySQL version is lower than 5.5 and 'mysql51_replication' option is " - "not enabled, replication tree cannot be resolved. To enable MySQL 5.1 replication " - "detection, add 'mysql51_replication=true' to the monitor section."); - } + MXS_ERROR("MariaDB/MySQL version of server '%s' is less than 5.5, which is not supported. " + "The server is ignored by the monitor.", serv_info->name()); + report_version_err = false; } } @@ -1092,14 +972,7 @@ MariaDBServer* MariaDBMonitor::find_root_master() else { /* Compute the replication tree */ - if (m_mysql51_replication) - { - found_root_master = build_mysql51_replication_tree(); - } - else - { - found_root_master = get_replication_tree(); - } + found_root_master = get_replication_tree(); } if (m_detect_multimaster && num_servers > 0) diff --git a/server/modules/monitor/mariadbmon/mariadbmon.cc b/server/modules/monitor/mariadbmon/mariadbmon.cc index 9555c10bc..20570158f 100644 --- a/server/modules/monitor/mariadbmon/mariadbmon.cc +++ b/server/modules/monitor/mariadbmon/mariadbmon.cc @@ -195,7 +195,6 @@ bool MariaDBMonitor::load_config_params(const MXS_CONFIG_PARAMETER* params) m_detect_standalone_master = config_get_bool(params, "detect_standalone_master"); m_failcount = config_get_integer(params, CN_FAILCOUNT); m_allow_cluster_recovery = config_get_bool(params, "allow_cluster_recovery"); - m_mysql51_replication = config_get_bool(params, "mysql51_replication"); m_script = config_get_string(params, "script"); m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values); m_failover_timeout = config_get_integer(params, CN_FAILOVER_TIMEOUT); @@ -284,7 +283,6 @@ json_t* MariaDBMonitor::diagnostics_json() const json_object_set_new(rval, "detect_standalone_master", json_boolean(m_detect_standalone_master)); json_object_set_new(rval, CN_FAILCOUNT, json_integer(m_failcount)); json_object_set_new(rval, "allow_cluster_recovery", json_boolean(m_allow_cluster_recovery)); - json_object_set_new(rval, "mysql51_replication", json_boolean(m_mysql51_replication)); json_object_set_new(rval, CN_AUTO_FAILOVER, json_boolean(m_auto_failover)); json_object_set_new(rval, CN_FAILOVER_TIMEOUT, json_integer(m_failover_timeout)); json_object_set_new(rval, CN_SWITCHOVER_TIMEOUT, json_integer(m_switchover_timeout)); @@ -1152,7 +1150,6 @@ MXS_MODULE* MXS_CREATE_MODULE() {"detect_replication_lag", MXS_MODULE_PARAM_BOOL, "false"}, {"detect_stale_master", MXS_MODULE_PARAM_BOOL, "true"}, {"detect_stale_slave", MXS_MODULE_PARAM_BOOL, "true"}, - {"mysql51_replication", MXS_MODULE_PARAM_BOOL, "false"}, {"multimaster", MXS_MODULE_PARAM_BOOL, "false"}, {"detect_standalone_master", MXS_MODULE_PARAM_BOOL, "true"}, {CN_FAILCOUNT, MXS_MODULE_PARAM_COUNT, "5"}, diff --git a/server/modules/monitor/mariadbmon/mariadbserver.cc b/server/modules/monitor/mariadbmon/mariadbserver.cc index 4219b0d51..78177faa8 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.cc +++ b/server/modules/monitor/mariadbmon/mariadbserver.cc @@ -39,7 +39,7 @@ SlaveStatus::SlaveStatus() MariaDBServer::MariaDBServer(MXS_MONITORED_SERVER* monitored_server) : m_server_base(monitored_server) - , m_version(MYSQL_SERVER_VERSION_51) + , m_version(MARIADB_VERSION_UNKNOWN) , m_server_id(SERVER_ID_UNKNOWN) , m_group(0) , m_read_only(false) @@ -87,20 +87,17 @@ bool MariaDBServer::do_show_slave_status() string query; switch (m_version) { - case MYSQL_SERVER_VERSION_100: + case MARIADB_VERSION_100: columns = 42; query = "SHOW ALL SLAVES STATUS"; break; - case MYSQL_SERVER_VERSION_55: + case MARIADB_VERSION_55: columns = 40; query = "SHOW SLAVE STATUS"; break; - case MYSQL_SERVER_VERSION_51: // TODO: Remove support? - columns = 38; - query = "SHOW SLAVE STATUS"; - break; default: - ss_dassert(!true); + ss_dassert(!true); // This method should not be called for versions < 5.5 + return false; } auto result = execute_query(query); @@ -139,7 +136,7 @@ bool MariaDBServer::do_show_slave_status() int64_t i_slave_rec_hbs = -1, i_slave_hb_period = -1; int64_t i_using_gtid = -1, i_gtid_io_pos = -1; - if (m_version == MYSQL_SERVER_VERSION_100) + if (m_version == MARIADB_VERSION_100) { i_slave_rec_hbs = result->get_col_index("Slave_received_heartbeats"); i_slave_hb_period = result->get_col_index("Slave_heartbeat_period"); @@ -198,7 +195,7 @@ bool MariaDBServer::do_show_slave_status() int io_errno = last_io_errno; const int connection_errno = 2003; - if ((io_errno == 0 || io_errno == connection_errno) && m_version != MYSQL_SERVER_VERSION_51) + if (io_errno == 0 || io_errno == connection_errno) { /* Get Master_Server_Id */ auto parsed = result->get_uint(i_master_server_id); @@ -208,7 +205,7 @@ bool MariaDBServer::do_show_slave_status() } } - if (m_version == MYSQL_SERVER_VERSION_100) + if (m_version == MARIADB_VERSION_100) { int heartbeats = result->get_uint(i_slave_rec_hbs); if (m_n_slave_heartbeats < heartbeats) @@ -308,7 +305,7 @@ void MariaDBServer::read_server_variables() MXS_MONITORED_SERVER* database = m_server_base; string query = "SELECT @@global.server_id, @@read_only;"; int columns = 2; - if (m_version == MYSQL_SERVER_VERSION_100) + if (m_version == MARIADB_VERSION_100) { query.erase(query.end() - 1); query += ", @@global.gtid_domain_id;"; diff --git a/server/modules/monitor/mariadbmon/mariadbserver.hh b/server/modules/monitor/mariadbmon/mariadbserver.hh index 303f06a12..9d9d73a1e 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.hh +++ b/server/modules/monitor/mariadbmon/mariadbserver.hh @@ -18,13 +18,6 @@ #include #include "gtid.hh" -enum mysql_server_version -{ - MYSQL_SERVER_VERSION_100, - MYSQL_SERVER_VERSION_55, - MYSQL_SERVER_VERSION_51 -}; - enum print_repl_warnings_t { WARNINGS_ON, @@ -83,10 +76,17 @@ public: class MariaDBServer { public: + enum mariadb_version + { + MARIADB_VERSION_UNKNOWN, // Anything older than 5.5. These are no longer supported by the monitor. + MARIADB_VERSION_55, // 5.5, oldest still supported release. Not all monitor features work. + MARIADB_VERSION_100 // 10.0 and greater. In practice though, 10.0.2 or greater is assumed. + }; + MXS_MONITORED_SERVER* m_server_base; /**< Monitored server base class/struct. MariaDBServer does not * own the struct, it is not freed (or connection closed) when * a MariaDBServer is destroyed. Can be const on gcc 4.8 */ - mysql_server_version m_version; /**< Server version, 10.X, 5.5 or 5.1 */ + mariadb_version m_version; /**< Server version */ int64_t m_server_id; /**< Value of @@server_id. Valid values are 32bit unsigned. */ int m_group; /**< Multi-master group where this server belongs, * 0 for servers not in groups */