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:
@ -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 const char HB_TABLE_NAME[] = "maxscale_schema.replication_heartbeat";
|
||||||
static bool report_version_err = true;
|
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
|
* 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.
|
* 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);
|
uint64_t version_num = server_get_version(database->server);
|
||||||
if (version_num >= 100000)
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
serv_info->m_version = MYSQL_SERVER_VERSION_51;
|
serv_info->m_version = MariaDBServer::MARIADB_VERSION_UNKNOWN;
|
||||||
}
|
}
|
||||||
/* Query a few settings. */
|
/* Query a few settings. */
|
||||||
serv_info->read_server_variables();
|
serv_info->read_server_variables();
|
||||||
/* If gtid domain exists and server is 10.0, update gtid:s */
|
/* 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();
|
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);
|
monitor_mysql_db(serv_info);
|
||||||
}
|
}
|
||||||
else
|
else if (report_version_err)
|
||||||
{
|
{
|
||||||
if (m_mysql51_replication)
|
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());
|
||||||
monitor_mysql_db(serv_info);
|
report_version_err = false;
|
||||||
}
|
|
||||||
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.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1092,14 +972,7 @@ MariaDBServer* MariaDBMonitor::find_root_master()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Compute the replication tree */
|
/* Compute the replication tree */
|
||||||
if (m_mysql51_replication)
|
found_root_master = get_replication_tree();
|
||||||
{
|
|
||||||
found_root_master = build_mysql51_replication_tree();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
found_root_master = get_replication_tree();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_detect_multimaster && num_servers > 0)
|
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_detect_standalone_master = config_get_bool(params, "detect_standalone_master");
|
||||||
m_failcount = config_get_integer(params, CN_FAILCOUNT);
|
m_failcount = config_get_integer(params, CN_FAILCOUNT);
|
||||||
m_allow_cluster_recovery = config_get_bool(params, "allow_cluster_recovery");
|
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_script = config_get_string(params, "script");
|
||||||
m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values);
|
m_events = config_get_enum(params, "events", mxs_monitor_event_enum_values);
|
||||||
m_failover_timeout = config_get_integer(params, CN_FAILOVER_TIMEOUT);
|
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, "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, 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, "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_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_FAILOVER_TIMEOUT, json_integer(m_failover_timeout));
|
||||||
json_object_set_new(rval, CN_SWITCHOVER_TIMEOUT, json_integer(m_switchover_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_replication_lag", MXS_MODULE_PARAM_BOOL, "false"},
|
||||||
{"detect_stale_master", MXS_MODULE_PARAM_BOOL, "true"},
|
{"detect_stale_master", MXS_MODULE_PARAM_BOOL, "true"},
|
||||||
{"detect_stale_slave", 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"},
|
{"multimaster", MXS_MODULE_PARAM_BOOL, "false"},
|
||||||
{"detect_standalone_master", MXS_MODULE_PARAM_BOOL, "true"},
|
{"detect_standalone_master", MXS_MODULE_PARAM_BOOL, "true"},
|
||||||
{CN_FAILCOUNT, MXS_MODULE_PARAM_COUNT, "5"},
|
{CN_FAILCOUNT, MXS_MODULE_PARAM_COUNT, "5"},
|
||||||
|
@ -39,7 +39,7 @@ SlaveStatus::SlaveStatus()
|
|||||||
|
|
||||||
MariaDBServer::MariaDBServer(MXS_MONITORED_SERVER* monitored_server)
|
MariaDBServer::MariaDBServer(MXS_MONITORED_SERVER* monitored_server)
|
||||||
: m_server_base(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_server_id(SERVER_ID_UNKNOWN)
|
||||||
, m_group(0)
|
, m_group(0)
|
||||||
, m_read_only(false)
|
, m_read_only(false)
|
||||||
@ -87,20 +87,17 @@ bool MariaDBServer::do_show_slave_status()
|
|||||||
string query;
|
string query;
|
||||||
switch (m_version)
|
switch (m_version)
|
||||||
{
|
{
|
||||||
case MYSQL_SERVER_VERSION_100:
|
case MARIADB_VERSION_100:
|
||||||
columns = 42;
|
columns = 42;
|
||||||
query = "SHOW ALL SLAVES STATUS";
|
query = "SHOW ALL SLAVES STATUS";
|
||||||
break;
|
break;
|
||||||
case MYSQL_SERVER_VERSION_55:
|
case MARIADB_VERSION_55:
|
||||||
columns = 40;
|
columns = 40;
|
||||||
query = "SHOW SLAVE STATUS";
|
query = "SHOW SLAVE STATUS";
|
||||||
break;
|
break;
|
||||||
case MYSQL_SERVER_VERSION_51: // TODO: Remove support?
|
|
||||||
columns = 38;
|
|
||||||
query = "SHOW SLAVE STATUS";
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
ss_dassert(!true);
|
ss_dassert(!true); // This method should not be called for versions < 5.5
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = execute_query(query);
|
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_slave_rec_hbs = -1, i_slave_hb_period = -1;
|
||||||
int64_t i_using_gtid = -1, i_gtid_io_pos = -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_rec_hbs = result->get_col_index("Slave_received_heartbeats");
|
||||||
i_slave_hb_period = result->get_col_index("Slave_heartbeat_period");
|
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;
|
int io_errno = last_io_errno;
|
||||||
const int connection_errno = 2003;
|
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 */
|
/* Get Master_Server_Id */
|
||||||
auto parsed = result->get_uint(i_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);
|
int heartbeats = result->get_uint(i_slave_rec_hbs);
|
||||||
if (m_n_slave_heartbeats < heartbeats)
|
if (m_n_slave_heartbeats < heartbeats)
|
||||||
@ -308,7 +305,7 @@ void MariaDBServer::read_server_variables()
|
|||||||
MXS_MONITORED_SERVER* database = m_server_base;
|
MXS_MONITORED_SERVER* database = m_server_base;
|
||||||
string query = "SELECT @@global.server_id, @@read_only;";
|
string query = "SELECT @@global.server_id, @@read_only;";
|
||||||
int columns = 2;
|
int columns = 2;
|
||||||
if (m_version == MYSQL_SERVER_VERSION_100)
|
if (m_version == MARIADB_VERSION_100)
|
||||||
{
|
{
|
||||||
query.erase(query.end() - 1);
|
query.erase(query.end() - 1);
|
||||||
query += ", @@global.gtid_domain_id;";
|
query += ", @@global.gtid_domain_id;";
|
||||||
|
@ -18,13 +18,6 @@
|
|||||||
#include <maxscale/monitor.h>
|
#include <maxscale/monitor.h>
|
||||||
#include "gtid.hh"
|
#include "gtid.hh"
|
||||||
|
|
||||||
enum mysql_server_version
|
|
||||||
{
|
|
||||||
MYSQL_SERVER_VERSION_100,
|
|
||||||
MYSQL_SERVER_VERSION_55,
|
|
||||||
MYSQL_SERVER_VERSION_51
|
|
||||||
};
|
|
||||||
|
|
||||||
enum print_repl_warnings_t
|
enum print_repl_warnings_t
|
||||||
{
|
{
|
||||||
WARNINGS_ON,
|
WARNINGS_ON,
|
||||||
@ -83,10 +76,17 @@ public:
|
|||||||
class MariaDBServer
|
class MariaDBServer
|
||||||
{
|
{
|
||||||
public:
|
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
|
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
|
* own the struct, it is not freed (or connection closed) when
|
||||||
* a MariaDBServer is destroyed. Can be const on gcc 4.8 */
|
* 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. */
|
int64_t m_server_id; /**< Value of @@server_id. Valid values are 32bit unsigned. */
|
||||||
int m_group; /**< Multi-master group where this server belongs,
|
int m_group; /**< Multi-master group where this server belongs,
|
||||||
* 0 for servers not in groups */
|
* 0 for servers not in groups */
|
||||||
|
Reference in New Issue
Block a user