Anuncios

Bienvenidos sean a este post, hoy veremos los distintos comandos para realizar el mantenimiento del servidor.

Anuncios

Flushing los logs

Cuando nos referimos a Flush nos estamos refiriendo a borrar y volver a empezar un elemento, por esta razon cuando terminamos una operacion de backup o restauracion es recomendable realizar esta accion para reiniciar a los logs, pero en el caso de mariadb cuando realiza un flush lo que en realidad hace es cerrar todos los archivos de logs, crear unos nuevos y a estos volverlos a llenar con toda la informacion almacenada en los buffers, para los logs basados en archivos usamos simplemente a:

FLUSH LOGS;
Anuncios

Esto hara una limpieza de todos los logs que tengamos pero si necesitamos limpiar uno especificamente debemos usar uno de los siguientes:

  • FLUSH ERROR LOGS, limpia el log de los errores
  • FLUSH GENERAL LOGS, limpia el log general de queries
  • FLUSH SLOW LOGS, limpia el log de queries lentos
  • FLUSH BINARY LOGS, limpia el log binario
  • FLUSH ENGINE LOGS, limpia el log de los motores de almacenamiento
  • FLUSH RELAY LOGS, limpia el log de los esclavos de la replicacion
Anuncios

Todas estas ejecuciones son recibidas de manera predeterminada por los esclavos en un entorno de replicacion pero para ejecutar solamente en los amos se pueden usar las palabras LOCAL o NO_WRITE_TO_BINLOG las cuales se utilizan para lo mismo, veamos el siguiente ejemplo:

FLUSH NO_WRITE_TO_BINLOG LOGS;
FLUSH LOCAL ERROR LOGS;
Anuncios

Esto que comentamos es para los logs basados en archivos pero como lo hacemos con las tablas? para ello existe el siguiente comando:

FLUSH TABLES;
Anuncios

Este trabaja exactamente igual al anterior donde nos reiniciara todas las tablas donde almacenamos los logs pero con la diferencia de que no podemos especificar una tabla especificamente sino que las limpiaremos a todas, aunque si podemos limpiar unicamente a los amos como vimos en el caso anterior con la palabra LOCAL, veamos un ejemplo:

FLUSH TABLES;
FLUSH LOCAL TABLES;
Anuncios

Por ultimo tambien podemos usar a mysqladmin para ejecutar estos comandos:

mysqladmin flush-logs
mysqladmin flush-tables
Anuncios

Rotando los archivos de logs

Anuncios

Debido a que mariadb no efectua la rotacion de los archivos de log debemos hacerlo manualmente, con la unica excepcion del log binario que lo realiza automaticamente despues de un cierto tamaño pero esto es un tema que discutiremos mucho mas adelante, volviendo a lo que nos concierne al tener que efectuar la rotacion de los archivos manualmente quedara a criterio del administrador cuando hacerlo, ya sea cuando se alcanza cierto tamaño o pasado cierto tiempo, esta tarea consiste simplemente en renombrar los archivos donde se almacena el log, para entender este concepto vamos a ver los archivos:

Anuncios
Nota: 
Esta es la ubicacion para una distro Debian en otras distros puede variar.
Anuncios
tinchicus@dbn001vrt:/var/lib/mysql$ ls -l maria.*
-rw-rw---- 1 mysql mysql 4252 jul 16 12:50 maria.log
-rw-r----- 1 mysql  mysql  4252 jun 12 10:05 maria.log.02
-rw-r----- 1 mysql  mysql  4252 may 10 08:48 maria.log.03
tinchicus@dbn001vrt:/var/lib/mysql$
Anuncios

Este es un ejemplo donde tenemos varios logs almacenados en nuestro directorio de datos, lo primero que haremos sera detener el log mediante el siguiente comando en el cliente:

MariaDB [(none)]> set @@global.general_log = 0;
Anuncios

Esto detendra automaticamente nuestro log para acto seguido proceder a borrar o remover el archivo con la extension 03:

tinchicus@dbn001vrt:/var/lib/mysql$ sudo rm maria.log.03
Anuncios

Con nuestro archivo eliminado procedemos a cambiar el nombre de los otros dos archivos con los siguientes comandos:

tinchicus@dbn001vrt:/var/lib/mysql$ sudo mv maria.log.02 maria.log.03
tinchicus@dbn001vrt:/var/lib/mysql$ sudo mv maria.log maria.log.02
Anuncios

Lo que hacemos es basicamente mover y cambiar los nombres de los archivos para reemplacen a los anteriores, con esto ya tenemos los nuevos backups, solo nos resta volver a activar el log mediante el siguiente comando:

MariaDB [(none)]> set @@global.general_log = 1;
Anuncios

Y por ultimo como buena practica (porque el archivo nuevo ya se genero) hacemos un flush de los logs mediante el siguiente comando:

tinchicus@dbn001vrt:/var/lib/mysql$ mysqladmin flush-logs -u tinchicus -p
Anuncios

Pero con todo esto ya tenemos nuestro log como nuevo y con sus backups preparados, veamos como quedaron nuestros archivos finalmente:

tinchicus@dbn001vrt:/var/lib/mysql$ ls -l maria.*
-rw-rw---- 1 mysql mysql  443 jul 16 13:13 maria.log
-rw-rw---- 1 mysql mysql 4426 jul 16 12:58 maria.log.02
-rw-r----- 1 root  root  4252 jul 16 12:50 maria.log.03
tinchicus@dbn001vrt:/var/lib/mysql$
Anuncios

Un par de detalles antes de continuar, para poder realizar esto deben usar al usuario root o como vimos aqui con los permisos de sudo necesarios, en todas las distros de linux existen herramientas para poder realizar esto por nosotros sin correr grandes riesgos, y por ultimo para Windows es de la misma forma pero deben utilizar los comandos del para borrar y ren para renombrar los archivos o usen move que equivale al mv de linux, obviamente si desean hacer estos pasos por ustedes mismos generen un script que realice todos y cada uno de estos pasos.

Anuncios

Rotacion de las tablas de logs

Recien vimos como hacer una rotacion de los archivos pero lo mismo podemos hacer con las tablas de log general de queries y de queries lentos, a diferencia del caso anterior debemos manejarnos de otra forma y para ello crearemos primero un procedimiento y luego un evento para ejecutar dicho procedimiento, comencemos con el primer tema:

CREATE PROCEDURE '_'.'rotar_log_general'()
BEGIN
    DECLARE log_general_viejo TINYINT DEFAULT @@global.general_log;
    SET @@global.general_log = 0;
    DROP TABLE 'mysql'.'general_log03';
    RENAME TABLE
        'mysql'.'general_log02' TO 'mysql'.'general_log03',
        'mysql'.'general_log' TO 'mysql'.'general_log02';
    CREATE TABLE 'mysql'.'general_log' LIKE 'mysql'.'general_log02';
    SET @@global.general_log = log_general_viejo;
END;
Anuncios
Anuncios

Primero crearemos un nuevo procedimiento con el nombre de rotar_log_general, luego en el bloque primero creareamos una nueva variable llamada log_general_viejo la cual poseera como valor predeterminado al valor de general_log, el siguiente paso sera detener al log estableciendo a general_log como 0 (tal como vimos antes) y luego eliminando a la tabla general_log03, despues renombraremos las tablas general_log02 como general_log03 y a general_log como general_log02, por ultimo crearemos una nueva tabla llamada general_log y le diremos que la genere como general_log02, es decir que copie toda su estructura en esta nueva tabla, por ultimo establecemos nuevamente el valor de general_log con el almacenado en log_general_viejo, dando final a nuestro procedimiento.

Anuncios

Con nuestro procedimiento creado ya tenemos como rotar las tablas pero nos falta el evento que se encargara de ejecutarlo para ello crearemos el siguiente evento:

CREATE EVENT 'event_db'.'rotar_log_general'
    ON SCHEDULE
        EVERY 1 WEEK
        STARTS '2022-01-01 00:00:00'
    COMMENT 'Rota el log general'
DO BEGIN
    CALL '_'.'rotar_log_general'();
END;
Anuncios
Anuncios

Al crear el evento primero informaremos el tipo de evento que es, seguido del procedimiento que creamos anteriormente, luego lo programaremos para la semana, en este caso le decimos que corra una vez por semana, que comenzara desde el primer sabado del 2022 a las 00:00:00 para que no estorbe las tareas diarias de la gente y a partir de ahora lo hara todos los sabados de cada mes, por ultimo le agregamos un comentario para saber que esta haciendo, lo siguiente sera el llamado al procedimiento para su ejecucion, con esto ya tenemos de una forma simple como hacer la rotacion de nuestras tablas.

Anuncios

En resumen, hoy hemos visto el mantenimiento de los logs, que es un flush, como se hace tanto para los archivos como para las tablas, hemos visto como hacer las rotaciones primero de los archivos de tipo log, luego de las tablas, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50