A continuación dejo un pequeño post de como montar un sistema automático de notificación via mail que nos indique cual es el estado de nuestra base de datos. Por ejemplo lo podemos programar un poquito antes de empezar nuestra jornada laboral y antes de irnos o mientras estamos de vacaciones (jaja...). Este ejemplo es sobre un Mysql 5.X corriendo sobre Debian. Pasos que sigue:
-
Chequeo de tiempo de actividad del servidor, memoria y espacio en disco.
-
Chequeo de las últimas copias de seguridad o los logs de las mismas
-
Obtención del estado de la base de datos
-
Logs de error de la base de datos.
-
Notificación via mail.
El sistema consiste en construir un script que construya nuestro informe en un fichero para luego enviarlo por correo. Además, en este ejemplo el estado de la base de datos lo obtengo con mysqlreport*. Este nos dá suficiente información para saber que ha pasado últimamente en la base de datos y podemos detectar cualquier problema si sabemos cual es la linea base.
*Cuidado porque está disponible a partir de la versión 5.x
Paso 1) Edición báscia del script base checklist.sh. Como se puede observar no tiene ningun secreto ya que se trata solo de redirigir siempre la salida de un comando concreto a un fichero temporal que luego adjuntamos como cuerpo del mail o adjunto. El formato y el estilo ya son cosas de cada uno...
#!/bin/bash # # Checklist diario mysql # # Parámetros LOG=/scripts/checklist/check.txt
# A continuacion empiezan las accciones TXT='' SL='' # Estado de la máquina TXT='>>> 0.UPTIME' echo $TXT > $LOG w >> $LOG # Memoria del servidor TXT='>>> 1.MEMORIA' echo $SL >> $LOG echo $TXT >> $LOG free -m >> $LOG #Espacio en disco TXT='>>> 2.ESPACIO EN DISCO' echo $SL >> $LOG echo $TXT >> $LOG df -h >> $LOG # Úlitmos backups TXT='>>>3.BACKUPS' echo $SL >> $LOG echo $TXT >> $LOG ls -lh -t /var/backups_mysql/ >> $LOG #Estado mysql TXT='>>>4.ESTADO MYSQL' echo $SL >> $LOG echo $TXT >> $LOG mysqlreport –user root –password pwd –all >> $LOG
# Notificación via mail echo “Checklist”|mail .s “MYSQL > Checklist diario” ilmasacratore@dataprix.com < $LOG # Borramos fichero temp rm $LOG
|
Paso 2) Permisos de ejecución y programación
En el caso de sistemas unix podemos utilizar crontab para programar la ejecución, previa asignación de permisos de ejecución al fichero para el usuario que vaya a meterlo en su cron
Ejemplo de correo:
0.UPTIME 09:00:01 up 13:20, 0 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT >>> 1.MEMORIA total used free shared buffers cached Mem: 884 877 6 0 44 745 -/+ buffers/cache: 88 795 Swap: 737 0 737 >>> 2.ESPACIO EN DISCO Filesystem Size Used Avail Use% Mounted on /dev/sda1 17G 8.4G 7.9G 52% / tmpfs 443M 0 443M 0% /lib/init/rw tmpfs 443M 0 443M 0% /dev/shm >>> 3.BACKUPS >>> 4.ESTADO MYSQL MySQL 5.0.32-Debian_7et uptime 0 13:9:20 Wed Jul 14 09:00:01 2010 __ Key _________________________________________________________________ Buffer used 387.00k of 16.00M %Used: 2.36 Current 1.84M %Usage: 11.52 Write ratio 0.03 Read ratio 0.10 __ Questions ___________________________________________________________ Total 7.61k 0.16/s Com_ 5.47k 0.12/s %Total: 71.93 COM_QUIT 807 0.02/s 10.61 DMS 665 0.01/s 8.74 +Unknown 602 0.01/s 7.92 QC Hits 61 0.00/s 0.80 Slow 6 0.00/s 0.08 %DMS: 0.90 DMS 665 0.01/s 8.74 SELECT 648 0.01/s 8.52 97.44 UPDATE 12 0.00/s 0.16 1.80 DELETE 4 0.00/s 0.05 0.60 INSERT 1 0.00/s 0.01 0.15 REPLACE 0 0.00/s 0.00 0.00 Com_ 5.47k 0.12/s 71.93 show_create 1.15k 0.02/s 15.10 show_status 797 0.02/s 10.48 show_variab 797 0.02/s 10.48 __ SELECT and Sort _____________________________________________________ Scan 3.92k 0.08/s %SELECT: 605.09 Range 0 0.00/s 0.00 Full join 1 0.00/s 0.15 Range check 0 0.00/s 0.00 Full rng join 0 0.00/s 0.00 Sort scan 7 0.00/s Sort range 1 0.00/s Sort mrg pass 0 0.00/s __ Query Cache _________________________________________________________ Memory usage 106.50k of 16.00M %Used: 0.65 Block Fragmnt 0.68% Hits 61 0.00/s Inserts 65 0.00/s Prunes 1 0.00/s Insrt:Prune 65:1 0.00/s Hit:Insert 0.94:1 __ Table Locks _________________________________________________________ Waited 0 0.00/s %Total: 0.00 Immediate 1.32k 0.03/s __ Tables ______________________________________________________________ Open 64 of 64 %Cache: 100.00 Opened 2.01k 0.04/s __ Connections _________________________________________________________ Max used 3 of 100 %Max: 3.00 Total 810 0.02/s __ Created Temp ________________________________________________________ Disk table 1.19k 0.03/s Table 3.52k 0.07/s File 5 0.00/s
|
Ahora, a quien le guste o sepa un poco del tema se le ocurren mil cosas que añadir o cosas que faltan. Para algunas consultas concretas como número de processos etc podemos usar desde linea de comandos mysqladmin -u <usuario> -p <clave> <opción> para obtener más datos interesantes... Cada uno que se lo haga a su manera!!