MXS-1703 Remove support for MariaDB/MySQL versions less than 5.5

5.1 to 5.3 are officially not supported anymore, so support can be removed from
the monitor. This allows removing the config parameter "mysql51_replication".
This commit is contained in:
Esa Korhonen 2018-04-24 18:23:23 +03:00
parent 8e3bec5d09
commit 7c933df56f
4 changed files with 30 additions and 163 deletions

View File

@ -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)

View File

@ -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"},

View File

@ -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;";

View File

@ -18,13 +18,6 @@
#include <maxscale/monitor.h>
#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 */