MySQL es un motor de bases de datos muy extendido en ambientes GNU/Linux, y es uno de los mas utilizados en la web.

Además de los backups programados, que deben ser periódicos(o deberían), hay otras tareas de mantenimiento que debemos tener en cuenta para el óptimo funcionamiento de las mismas. A continuación describo algunas tareas típicas de mantenimiento.

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 un archivo de las sentencias SQL necesarias para crear la estructura de las tablas y los datos de la misma. Otra forma es mediante el uso de scripts, automysqlbackup.sh es un script muy popular para realizar copias de seguridad y rotación de las mismas.

http://sourceforge.net/projects/automysqlbackup/

Limpieza de logs binarios
Si tenemos activados los logs binarios, 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 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:

PURGE MASTER LOGS TO ‘bin-log.000012′;

PURGE MASTER LOGS BEFORE ’2008-07-23 00:00:00′

Debemos evitar eliminar los logs binarios borrando directamente el archivo desde el sistema operativo (rm -f binglog.*).

NOTA: 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 son archivos y al cabo de varias operaciones de manipulación de datos (INSERT, UPDATE, DELETE) se puede generar fragmentación, espacio inútil, 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.

Para rotar los logs por tiempo, puedes crear un script a ejecutar desde el cron que ejecute simplemente un FLUSH LOGS;

AutoMySQLBackup
AutoMySQLBackup es un script que podemos encontrar en sourceforge y luego de una configuración sencilla permite crear backups diarios y realizar rotaciones de los backups.

Para utilizarlo creamos el directorio de backup:
# cd /srv/www
# md backup/db/htdocs
# chmod -R 664 backup
Los respaldos de las bases de datos se guardarán en el directorio db y creamos el directorio htdocs para respaldar los archivos.

Copiar el script automysqlbackup-251.sh en /etc/cron.daily
Editar el script:
# vim /etc/cron.daily/automysqlbackup-251.sh
USERNAME=root
PASSWORD=clave
DBHOST=localhost
DBNAMES=”atrium cdcol ocsweb glpi auditel contactos”
BACKUPDIR=”/srv/www/backup/db”
MAILADDR=”root@localhost”

Configurar el archivo /etc/crontab para configurar el horario de backup:
# vim /etc/crontab
-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
-15 05 * * * root rm /var/spool/cron/lastrun/cron.daily

Agregando esta segunda linea eliminamos el archivo con la hora de la ultima ejecución de cron.

Esta versión del script fue descargada de http://www.debianhelp.co.uk/mysqlscript.htm


Deja un comentario

Desarrollado por AnimacionyWeb     Stats