Überprüfen Sie, ob Remote-MySQL ausgeführt wird

Überprüfen Sie, ob Remote-MySQL ausgeführt wird

Ich möchte ein Bash-Shell-Skript, das ich mit einem Cron-Job ausführen kann, um zu prüfen, ob MySQL auf einem Remote-Server ausgeführt wird. Wenn dies der Fall ist, tun Sie nichts, andernfalls starten Sie den Server.

Der Cronjob prüft jede Minute, ob der Remote-Server aktiv (oder nicht) ist. Ich kann den Cronjob selbst schreiben, aber ich brauche Hilfe mit dem Shell-Skript, das prüft, ob ein Remote-MySQL aktiv oder inaktiv ist. Die Antwort nach der Prüfung, ob aktiv oder inaktiv ist, ist nicht wichtig. Aber die Prüfung ist wichtig.

Danke schön.

Antwort1

Verbinden mit mysqldübermysqladmin

Die MySQL-Dokumentation sagt übermysqladmin ping

Überprüfen Sie, ob der Server verfügbar ist. Der von mysqladmin zurückgegebene Status ist 0, wenn der Server läuft, und 1, wenn er nicht läuft. Dies ist auch bei einem Fehler wie „Zugriff verweigert“ 0, da dies bedeutet, dass der Server läuft, aber die Verbindung verweigert hat, was etwas anderes ist, als wenn der Server nicht läuft.

Erstellen Sie zunächst einen Benutzer ohne Berechtigungen

mysql> GRANT USAGE ON *.* TO ping@'%' IDENTIFIED BY 'ping';

Erstellen Sie ein Skript wie dieses

#!/bin/bash

MYSQL_USER=ping
MYSQL_PASS=ping
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysqladmin ping ${MYSQL_CONN} 2>/dev/null 1>/dev/null
MYSQLD_RUNNING=${?}
if [ ${MYSQLD_RUNNING} -eq 1 ]; then service mysql start ; fi

Platzieren Sie das Skript nach Wunsch in einer Crontab

Stellen Sie sicher, dass die Firewall auf 3306 geöffnet ist, damit ping@'%' eine Verbindung herstellen kann.

Antwort2

Die Überprüfung ist ganz einfach:

mysql -e "select 1" || echo down

Sie könnten das Echo durch einen SSH-Befehl an root ersetzen, um den Dienst zu starten, aber das scheint ein bisschen riskant. Es könnte Auswirkungen auf die Sicherheit haben. Es könnte nicht zuverlässig sein. Ich würde vorschlagen, dass Sie wahrscheinlich eine Art geeignete Cluster-/Failover-Software dafür haben sollten. Es gibt MySQL MMM, das wir früher verwendet haben, aber ich habe gehört, dass es nicht mehr so ​​beliebt ist.

Antwort3

Vorausgesetzt, Sie verfügen über eine SSH-Schlüsselauthentifizierung für die kennwortlose Anmeldung als Root-Benutzer auf dem Remotecomputer, können Sie den folgenden Befehl ausführen:

ssh remotemysql "wenn [ 'ps -efww | grep mysql| grep -v grep' ]; dann echo "Server ist aktiv"; sonst echo "Server ist inaktiv"; fi"

Ersetzen Sie echo "Server ist down" durch ein MySQL-Startskript. Sagen wir /etc/init.d/mysqld start

Antwort4

Ich möchte ein Bash-Shell-Skript, das ich mit einem Cron-Job ausführen kann, um zu überprüfen, ob MySQL auf einem Remote-Server ausgeführt wird.

Das erfüllt mich mit Beklommenheit. Ich kann mir nicht vorstellen, warum irgendjemand denken sollte, dass dies eine gute Möglichkeit ist, einen Dienst zu verwalten. Mysql wird mit Startskripten geliefert, die sich in systemd und sysvinit integrieren lassen, die die Standardmethoden zum Starten eines Dienstes in einem Linux/Unix-System sind. Systemd verfügt über eine integrierte Funktion zum Neustarten eines ausgefallenen Dienstes – aber ich habe aus sehr offensichtlichen Gründen noch nie eine Standardkonfiguration gesehen, die diese Option ausführt, und wenn es einen guten Grund dafür gäbe, könnte sie mit einem Respawn aus der Inittab auf einem SysV-System aufgerufen werden. Wenn dies mit dem Ausführen einer benutzerspezifischen Instanz des DBMS zusammenhängt (wie es Kmail tut), sollte der Auslösering von der Benutzersitzung gesteuert werden, nicht von Cron.

Aber wenn man die Legitimität der Frage einmal beiseite lässt, bedeutet die Verwendung von mysql oder mysqladmin zur Überwachung des Status des Dienstes, dass die Anmeldeinformationen für die Verbindung mit der Datenbank preisgegeben werden - was aus Sicherheitsgründen keine sehr gute Idee ist. Es führt auch zu Komplikationen bei der Ressourcenverwaltung (wenn Sie die maximale Anzahl an Verbindungen erreichen, kann es so aussehen, als wäre Ihr Dienst ausgefallen).

Ob der Dienst ausgeführt wird, können Sie an folgenden Punkten erkennen:

  • das Vorhandensein eines mysqld-Prozesses in der Ausgabe von 'ps' oder im /proc-Dateisystem
  • ein Listening-Socket auf dem entsprechenden Port (den Sie mit netcat prüfen oder aus der Ausgabe von netstat ermitteln können)

verwandte Informationen