Compare commits
1 commit
81edbef68b
...
9b3a781258
Author | SHA1 | Date | |
---|---|---|---|
9b3a781258 |
2 changed files with 121 additions and 0 deletions
120
debian/patches/25_check_mysql_replica
vendored
Normal file
120
debian/patches/25_check_mysql_replica
vendored
Normal file
|
@ -0,0 +1,120 @@
|
|||
From 4886fa3debf79aa2faac9d0180e8ddb4bb1d4aaa Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Lorenz=20K=C3=A4stle?=
|
||||
<12514511+RincewindsHat@users.noreply.github.com>
|
||||
Date: Mon, 24 Feb 2025 19:52:08 +0100
|
||||
Subject: [PATCH 1/2] Add MySQL server version dectection and adaptive replica
|
||||
query
|
||||
|
||||
---
|
||||
|
||||
Taken from https://github.com/monitoring-plugins/monitoring-plugins/compare/master...maintenance-2.4.0-check_mysql.patch
|
||||
|
||||
---
|
||||
plugins/check_mysql.c | 51 +++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 49 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c
|
||||
index 6a7daf11a..1b7403f7b 100644
|
||||
--- a/plugins/check_mysql.c
|
||||
+++ b/plugins/check_mysql.c
|
||||
@@ -211,8 +211,55 @@ main (int argc, char **argv)
|
||||
}
|
||||
|
||||
if(check_slave) {
|
||||
- /* check the slave status */
|
||||
- if (mysql_query (&mysql, "show slave status") != 0) {
|
||||
+ // Detect which version we are, on older version
|
||||
+ // "show slave status" should work, on newer ones
|
||||
+ // "show replica status"
|
||||
+ // But first we have to find out whether this is
|
||||
+ // MySQL or MariaDB since the version numbering scheme
|
||||
+ // is different
|
||||
+ bool use_deprecated_slave_status = false;
|
||||
+ const char *server_version = mysql_get_server_info(&mysql);
|
||||
+ unsigned long server_verion_int = mysql_get_server_version(&mysql);
|
||||
+ unsigned long major_version = server_verion_int / 10000;
|
||||
+ unsigned long minor_version = (server_verion_int % 10000) / 100;
|
||||
+ unsigned long patch_version = (server_verion_int % 100);
|
||||
+ if (verbose) {
|
||||
+ printf("Found MariaDB: %s, main version: %lu, minor version: %lu, patch version: %lu\n", server_version, major_version,
|
||||
+ minor_version, patch_version);
|
||||
+ }
|
||||
+
|
||||
+ if (strstr(server_version, "MariaDB") != NULL) {
|
||||
+ // Looks like MariaDB, new commands should be available after 10.5.1
|
||||
+ if (major_version < 10) {
|
||||
+ use_deprecated_slave_status = true;
|
||||
+ } else if (major_version == 10) {
|
||||
+ if (minor_version < 5) {
|
||||
+ use_deprecated_slave_status = true;
|
||||
+ } else if (minor_version == 5 && patch_version < 1) {
|
||||
+ use_deprecated_slave_status = true;
|
||||
+ }
|
||||
+ }
|
||||
+ } else if (strstr(server_version, "MySQL") != NULL) {
|
||||
+ // Looks like MySQL
|
||||
+ if (major_version < 8) {
|
||||
+ use_deprecated_slave_status = true;
|
||||
+ } else if (major_version == 10 && minor_version < 4) {
|
||||
+ use_deprecated_slave_status = true;
|
||||
+ }
|
||||
+ } else {
|
||||
+ printf("Not a known sever implementation: %s\n", server_version);
|
||||
+ exit(STATE_UNKNOWN);
|
||||
+ }
|
||||
+
|
||||
+ char *replica_query = NULL;
|
||||
+ if (use_deprecated_slave_status) {
|
||||
+ replica_query = "show slave status";
|
||||
+ } else {
|
||||
+ replica_query = "show replica status";
|
||||
+ }
|
||||
+
|
||||
+ /* check the replica status */
|
||||
+ if (mysql_query(&mysql, replica_query) != 0) {
|
||||
error = strdup(mysql_error(&mysql));
|
||||
mysql_close (&mysql);
|
||||
die (STATE_CRITICAL, _("slave query error: %s\n"), error);
|
||||
|
||||
From 291a704bcf738f6ceb7a1f46c69b8332b33dbd70 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Lorenz=20K=C3=A4stle?=
|
||||
<12514511+RincewindsHat@users.noreply.github.com>
|
||||
Date: Fri, 26 Sep 2025 08:57:19 +0200
|
||||
Subject: [PATCH 2/2] check_mysql: Assume MySQL server by default (in replica
|
||||
check)
|
||||
|
||||
In the Debian Bug tracker (and then Github) a person pointed out,
|
||||
that a MySQL server does not respond with a hint that is indeed the
|
||||
MySQL software, but only with the version string.
|
||||
Which makes sense if one assumes to be the only implementation.
|
||||
|
||||
This commit changes the behaviour of the Replica check to assume
|
||||
that the counterpart is a MySQL server if there are not hints that
|
||||
it is a MariaDB server.
|
||||
---
|
||||
plugins/check_mysql.c | 7 ++-----
|
||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c
|
||||
index 1b7403f7b..951a96f93 100644
|
||||
--- a/plugins/check_mysql.c
|
||||
+++ b/plugins/check_mysql.c
|
||||
@@ -239,16 +239,13 @@ main (int argc, char **argv)
|
||||
use_deprecated_slave_status = true;
|
||||
}
|
||||
}
|
||||
- } else if (strstr(server_version, "MySQL") != NULL) {
|
||||
- // Looks like MySQL
|
||||
+ } else {
|
||||
+ // Looks like MySQL (or at least not like MariaDB)
|
||||
if (major_version < 8) {
|
||||
use_deprecated_slave_status = true;
|
||||
} else if (major_version == 10 && minor_version < 4) {
|
||||
use_deprecated_slave_status = true;
|
||||
}
|
||||
- } else {
|
||||
- printf("Not a known sever implementation: %s\n", server_version);
|
||||
- exit(STATE_UNKNOWN);
|
||||
}
|
||||
|
||||
char *replica_query = NULL;
|
1
debian/patches/series
vendored
1
debian/patches/series
vendored
|
@ -17,4 +17,5 @@
|
|||
22_check_by_ssh_missing_options
|
||||
23_sslutils_fix_error_message
|
||||
24_check_http_deprecation
|
||||
25_check_mysql_replica
|
||||
# feature patches
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue