Compruebe si MySQL remoto se está ejecutando

Compruebe si MySQL remoto se está ejecutando

Quiero un script de bash shell que pueda ejecutar usando un trabajo cron para verificar si mysql en un servidor remoto se está ejecutando. Si es así, no haga nada, simplemente inicie el servidor.

El cronjob comprobará el servidor remoto en busca de un mysql activo (o no) cada minuto. Puedo escribir el trabajo cron yo mismo, pero necesito ayuda con el script de shell que verifica si un MySQL remoto está activo o inactivo. La respuesta después de comprobar si está arriba o abajo no es importante. Pero el control es importante.

Gracias.

Respuesta1

Conéctate al mysqldusoadministrador_mysql

La documentación de MySQL dice sobremysqladmin ping

Compruebe si el servidor está disponible. El estado de retorno de mysqladmin es 0 si el servidor se está ejecutando, 1 si no lo está. Esto es 0 incluso en caso de un error como Acceso denegado, porque esto significa que el servidor se está ejecutando pero rechazó la conexión, lo cual es diferente a que el servidor no se esté ejecutando.

Primero, crea un usuario sin privilegios.

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

Crea un script como este

#!/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

Coloque ese script en un crontab como desee

Asegúrese de que el firewall esté abierto en 3306 para que ping@'%' pueda conectarse.

Respuesta2

Comprobar es tan fácil como esto:

mysql -e "select 1" || echo down

Podrías reemplazar el eco con un comando ssh en la raíz para iniciar el servicio, pero eso parece un poco arriesgado. Puede tener implicaciones de seguridad. Puede que no sea confiable. Sugeriría que probablemente debería tener algún tipo de software de clúster/conmutación por error adecuado para hacer esto. Existe MySQL MMM, que solíamos usar, pero entiendo que ha perdido popularidad.

Respuesta3

Suponiendo que tendrá autenticación sshkey para iniciar sesión sin contraseña para el usuario root en la máquina remota, puede ejecutar el siguiente comando:

ssh remotomysql "if [ 'ps -efww | grep mysql| grep -v grep' ]; entonces echo "el servidor está activo"; de lo contrario echo "el servidor está caído"; fi"

reemplace echo "el servidor no funciona" con el script de inicio de mysql. diga /etc/init.d/mysqld iniciar

Respuesta4

Quiero un script de bash shell que pueda ejecutar usando un trabajo cron para verificar si mysql en un servidor remoto se está ejecutando.

Esto me llena de temor. No puedo imaginar por qué alguien pensaría que esta es una buena forma de gestionar un servicio. Mysql viene con scripts de inicio que se integrarán con systemd y sysvinit, que son las formas estándar de iniciar un servicio en un sistema Linux/Unix. Systemd tiene una capacidad incorporada para reiniciar un servicio fallido, pero nunca he visto una configuración predeterminada que ejerza esta opción por razones muy obvias, y si hubiera una buena razón para hacerlo, podría invocarse con una reaparición desde inittab en un sistema sysv. Si esto se relaciona con la ejecución de una instancia por usuario del DBMS (como lo hace Kmail), entonces la activación debe ser controlada por la sesión del usuario, no por cron.

Pero dejando de lado la legitimidad de la pregunta, usar mysql o mysqladmin para monitorear el estado del servicio implica exponer las credenciales para conectarse a la base de datos, lo cual no es una muy buena idea desde el punto de vista de la seguridad. También crea complicaciones en torno a la gestión de recursos (cuando llegas al máximo de conexiones, puede parecer que tu servicio no funciona)

Puede saber si el servicio se está ejecutando desde:

  • la presencia de un proceso mysqld en la salida de 'ps' o en el sistema de archivos /proc
  • un conector de escucha en el puerto correspondiente (que puede sondear usando netcat o detectar desde la salida de netstat)

información relacionada