miércoles, 29 de junio de 2016

MySQL, tareas típicas de mantenimiento

Las tareas típicas (y automatizables) para el mantenimiento de MySQL son las siguientes:
  • Copias de seguridad
  • Limpieza de logs binarios
  • Optimización de tablas
  • Vaciamiento de cache de consultas
  • Rotación de logs binarios
A continuación, se explica brevemente cada una de las tareas mencionadas:
Copias de seguridad
Una de las formas clásicas de realizar backups de una base de datos MySQL es a través de mysqldump, programa que se encarga de hacer un volcado a archivo de las sentencias SQL necesarias para crear la estructura de las tablas y los datos de la misma. Recomiendo ver una publicación realizada tiempo atrás donde se presenta un shell script sencillo (candidato a ser ejecutado por un cron) que realiza una copia de seguridad de todas las bases de datos de un servidor. Ver: MySQL shell script backup
Limpieza de logs binarios
Si tienes activados los logs binarios, estos a la larga ocuparán varios Mb de nuestro disco y generalmente no tiene sentido mantener logs muy añejos.
Para “purgar” los logs binarios podemos hacerlo de una forma pasiva (modificando la configuración del servidor) o bien, de manera activa, ejecutando la instrucción PURGE MASTER LOGS desde el prompt de MySQL.
La forma pasiva, consiste en que MySQL limpie por su cuenta los logs binarios. Para hacer ésto, basta agregar al archivo de configuración my.cnf: expire_logs_days = 7
De forma activa, desde un promt de MySQL puedes ejecutar, por ejemplo:
PURGE MASTER LOGS TO ‘bin-log.000012’;
PURGE MASTER LOGS BEFORE ‘2008-07-23 00:00:00’
Evita eliminar los logs binarios borrando directamente el archivo desde el sistema operativo (rm -f binglog.*).
Presta especial atención al purgar los logs, pues si la base de datos está siendo replicada y los logs a “purgar” aun no han sido recogidos por el SLAVE, el mismo puede perderse de datos.
Optimización de tablas
Las tablas, al fin y al cabo, son archivos (dependiendo del motor de almacenamiento, uno o más archivos, un archivo único, etc.). Como archivo, al cabo de varias operaciónes de manipulación de datos (INSERT, UPDATE, DELETE) se puede generar fragmentación, espacio inutil, etc. Por tal razón, desde el prompt de MySQL puedes ejecutar la instrucción OPTIMIZE TABLE nombre_de_tabla para que MySQL haga lo suyo con los archivos.
Vaciamiento de cache de consultas
La caché de consultas almacena los resultados de una consulta, así el servidor responde más rápido si algún otro cliente los requiere. La cache de consultas también es susceptible a fragmentación, en especial cuando se ejecutan SELECTs con resultados de diferente tamaño. Por lo tanto, no está de más, que frecuentemente se vacíe esta cache de consultas. Para hacerlo, basta ejecutar la instrucción FLUSH QUERY CACHE.
Rotación de logs binarios
MySQL crea un nuevo archivo de log binario cada vez que es reiniciado o cada vez que se llegue a un tamaño máximo que se puede especificar en el my.cnf, por ejemplo: max_binlog_size=4M.
Aveces, puedes querer rotar los logs por tiempo en vez de por tamaño. Para rotar los tamaños por tiempo, puedes crear un script a ejecutar desde el cron que ejecute simplemente un FLUSH LOGS.
extraido de http://luauf.com/2008/08/30/mysql-tareas-tipicas-de-mantenimiento/

martes, 21 de junio de 2016

backup mysql rapido

#!/bin/sh

DBNAME=nombre_de_la_base
DATE=`date +"%Y%m%d"`
SQLFILE=$DBNAME-${DATE}.sql
mysqldump --opt --user=root --min $DBNAME > $SQLFILE
gzip $SQLFILE