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:
parent
8e3bec5d09
commit
7c933df56f
@ -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)
|
||||
|
@ -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"},
|
||||
|
@ -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;";
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user