A continuació deixo un petit post de com muntar un sistema automàtic de notificació via mail que ens indiqui quin és l'estat de la nostra base de dades. Per exemple el podem programar una mica abans de començar la nostra jornada laboral i abans de marxar o mentre estem de vacances (jaja. ..). Aquest exemple és sobre un Mysql 5.X corrent a Debian. Passos que segueix:

  • Revisió de temps d'activitat del servidor, memòria i espai de disc.
  • Revisió de les últimes còpies de seguretat o els logs de les mateixes
  • Obtenció de l'estat de la base de dades
  • Logs d'error de la base de dades.
  • Notificació via mail.

El sistema consisteix en construir un script que construeixi el nostre informe en un fitxer per després enviar-lo per correu. A més, en aquest exemple l'estat de la base de dades que obtinc amb mysqlreport *. Aquest ens dóna prou informació per saber que ha passat darrerament a la base de dades i podem detectar qualsevol problema si sabem quina és la línia base.

* Cura perquè està disponible a partir de la versió 5.x

Pas 1) Edició báscia de l'script base checklist.sh. Com es pot observar no té cap secret ja que es tracta només de redirigir sempre la sortida d'un ordre concret a un fitxer temporal que després adjuntem com a cos del mail o adjunt. El format i l'estil ja són coses de cada un ...

 

#!/bin/bash

#

# Checklist diari mysql

#

# Paràmetres

LOG=/scripts/checklist/check.txt

 

# A continuació comencen les accions van

TXT=''

SL=''

# Estat de la màquina

TXT='>>> 0.UPTIME'

echo $TXT > $LOG

w >> $LOG

# Memòria del servidor

TXT='>>> 1.MEMORIA'

echo $SL >> $LOG

echo $TXT >> $LOG

free -m >> $LOG

#Espai en disc

TXT='>>> 2.ESPAI EN DISC'

echo $SL >> $LOG

echo $TXT >> $LOG

df -h >> $LOG

# Darrers backups

TXT='>>>3.BACKUPS'

echo $SL >> $LOG

echo $TXT >> $LOG

ls -lh -t /var/backups_mysql/ >> $LOG

#Estat mysql

TXT='>>>4.ESTADO MYSQL'

echo $SL >> $LOG

echo $TXT >> $LOG

mysqlreport –user root –password pwd –all >> $LOG

 

# Notificació via mail

echo “Checklist”|mail .s “MYSQL > Checklist diari” ilmasacratore@dataprix.com < $LOG

# Esborrem fitxer temp

rm $LOG

 

 

 

Pas 2) Permisos d'execució i programació

En el cas de sistemes unix podem utilitzar crontab per programar l'execució, prèvia assignació de permisos d'execució al fitxer per a l'usuari que vagi a ficar-lo en la seva cron

Exemple de correu:

 

 

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.ESPAI EN DISC
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.ESTAT 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

 

 

Ara, a qui li agradi o sàpiga una mica del tema se li ocorren mil coses que afegir o coses que falten. Per algunes consultes concretes com a número de processos etc podem fer servir des línia de comandes mysqladmin-u <usuari>-p <clau> <opció> per obtenir més dades interessants ... Cada un que l'hi faci a la seva manera!!