#!/bin/bash #==============================================================================# # # DB-Bakup-IP-Check # # /root/bin/check_db.sh $(hostname -s) 3306 root geheimespasswort # #==============================================================================# VERSION="v2019021900" if [ "x${3}" = x ] ; then echo "${0} [Hostname] [Port] [User]" echo "${0} [Hostname] [Port] [User] [Passwort]" echo "${0} \$(hostname -s) 3306 dbuser geheimespasswort" exit 10 else mysql_host="${1}" fi #==============================================================================# #------------------------------------------------------------------------------# ROOT_FILE="/root/.my.cnf" ROOT_U="$(cat "${ROOT_FILE}" | awk '/^user/{print $3}')" ROOT_P="$(cat "${ROOT_FILE}" | awk '/^password/{print $3}')" STECKER="/var/run/mysqld/mysqld.sock" #==============================================================================# #------------------------------------------------------------------------------# ### erst muss die Master-IP hoch gefahren sein ### nur für Backup-IP aktivieren #sleep 3 #------------------------------------------------------------------------------# ### wenn dieses DBMS nicht läuft, dann darf die IP hier nicht aktiviert werden AUSGABE="$(echo "SHOW SLAVE STATUS \G;" | mysql -S ${STECKER} 2>/dev/null || echo Aus)" ### immer aktiviert if [ "${AUSGABE}" = "Aus" ] ; then echo "DB is not Running" rm_defaults-file exit 1 else CHANNEL_NAMEN="$(echo "${AUSGABE}" | awk '/Channel_Name:/{print $NF}')" fi #------------------------------------------------------------------------------# ### Kontrolliert, ob dieses MySQL-DBMS auf dem richtigen Host läuft node_response="$(echo "SHOW GLOBAL VARIABLES LIKE 'hostname';" | mysql -S ${STECKER} -N 2>/dev/null | awk '{ print $2 }')" if [ "${node_response}" != "${mysql_host}" ] ; then echo "Hostname not matched: ${node_response}/${mysql_host}" rm_defaults-file exit 1; fi #------------------------------------------------------------------------------# ### jeder Kanal muss separat überprüft werden ### Fehler sind hier nur relevant, wenn kein Kanal vernünftig läuft STATUS_GUT="$(for KANAL in ${CHANNEL_NAMEN} do #----------------------------------------------------------------------# ### Den Status aus diesem Kanal auslesen SLAVE_STATUS="$(echo "SHOW SLAVE STATUS FOR CHANNEL '${KANAL}' \G;" | mysql -S ${STECKER} -t 2>/dev/null)" MASTER_HOST="$(echo "${SLAVE_STATUS}" | fgrep "Master_Host:" | awk '{print $NF}')" if [ "${MASTER_HOST}" != "${node_response}" ] ; then MASTER_PORT="$(echo "${SLAVE_STATUS}" | fgrep "Master_Port:" | awk '{print $NF}')" SLAVE_IO_RUNNING="$(echo "${SLAVE_STATUS}" | fgrep "Slave_IO_Running:" | awk '{print $NF}')" SLAVE_SQL_RUNNING="$(echo "${SLAVE_STATUS}" | fgrep "Slave_SQL_Running:" | awk '{print $NF}')" SECONDS_BEHIND_MASTER="$(echo "${SLAVE_STATUS}" | fgrep "Seconds_Behind_Master:" | awk '{print $NF}')" #--------------------------------------------------------------# ### Kontrolle ob auf den richtigen Port verbunden wird unset MPORT if [ "${2}" -eq "${MASTER_PORT}" ] ; then echo "Master_Port: ${MASTER_PORT}" > /tmp/${2}ma.txt MPORT="Port" fi #--------------------------------------------------------------# ### Kontrolliert, ob dieser Knoten mit dem Cluster verbunden ist unset RUNNING IO_RUNNING="$(echo "${SLAVE_IO_RUNNING}" | fgrep Yes)" if [ "${IO_RUNNING}" = "Yes" ] ; then SQL_RUNNING="$(echo "${SLAVE_SQL_RUNNING}" | fgrep Yes)" if [ "${SQL_RUNNING}" = "Yes" ] ; then echo "Running: ${IO_RUNNING}/${SQL_RUNNING}" >> /tmp/${2}ma.txt RUNNING="Running" fi fi #--------------------------------------------------------------# #-# Diese Bedingung muss auf dem Backup-Slave nicht zwingend erfüllt sein ### Kontrolliert, ob dieser Knoten mit dem Cluster in Sync ist unset SEKUNDEN if [ "${SECONDS_BEHIND_MASTER}" = "NULL" ] ; then echo "Seconds_Behind_Master: ${SECONDS_BEHIND_MASTER}" >> /tmp/${2}ma.txt elif [ "${SECONDS_BEHIND_MASTER}" -eq "0" ] ; then echo "Seconds_Behind_Master: ${SECONDS_BEHIND_MASTER}" >> /tmp/${2}ma.txt SEKUNDEN="Seconds" fi echo "${MPORT} ${RUNNING} ${SEKUNDEN}" #--------------------------------------------------------------# fi #----------------------------------------------------------------------# done | fgrep "Port Running")" rm_defaults-file if [ "x${STATUS_GUT}" = "x" ] ; then echo "${2}ma $(date +'%F %T')" >> /tmp/KO.txt exit 1 fi