Servidores

Reducir el espacio ocupado por mysql

Uno de los grandes problemas de MySQL es que muchas veces los archivos engordan demasiado ocupando un espacio desmedido porque no se libera el espacio de forma adecuada por parte de MySQL mismo cuando se trata de tablas InnoDB

Dependiendo del uso que se le de a MySQL hay casos que una base de datos con un peso de 1GB termina ocupando en el disco 30GB o 40GB y esto es un problema fundamentalmente en servicios Cloud VPS de pocos recursos.

Vamos a ver como podemos reducir significativamente el uso del disco, lo primero que debemos hacer es un respaldo de todas las base de datos, el script una vez que corra ira eliminando las base de datos así que no me hago responsable del uso imprudente o de la falta de respaldo que tengas.

Antes de ejecutar lo siguiente asegúrate de tener un respaldo propio de las base de datos, solo luego de tenerlo prosigue con el resto del tutorial, igualmente si no estas seguro que estas haciendo es mejor que no lo hagas porque corres riesgos de perder datos.

¿Ya tienes tu respaldo? Bien, en un archivo, digamos llamado mysql_reduce.sh guarda el siguiente contenido

#!/bin/bash

OLDIFS=$IFS
IFS=$'\n'

for i in $(mysql -u root -Bse 'show databases' | egrep -v 'mysql|information_schema|performance_schema');
do
    echo $i
        mysqldump --opt -R -E --triggers "$i" --databases -c>> "$1";
        mysql -u root -Bse "drop database $i;" 
done

Esto no es un script de respaldo, esto BORRARA LA BASE DE DATOS LUEGO DEL DUMP, asi que mucho cuidado con no tener respaldo previo.

Una vez que guardamos los cambios le damos permisos de ejecución:

chmod +x mysql_reduce.sh

Ahora ejecutamos el script pasando le una ruta donde volcaremos este dump y a medida que lo vaya volcando ira eliminando la base de datos

./mysql_myreduce.sh /tmp/dump.sql

Una vez que el script termino, en nuestro servidor solo quedaran 3 tablas dadas de alta: mysql, information_schema y performance_schema, detenemos el servicio de mysql que puede llamarse mysql, mysqld o mariadb

service mariadb stop

Con el servicio detenido borramos los siguientes archivos:

find /var/lib/mysql/ -iname "ib_logfile*" -exec rm -f {} \;
find /var/lib/mysql/ -iname "ibdata*" -exec rm -f {} \;

Esto es opcional, podemos editar el archivo /etc/my.cnf

[mysqld]
innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_log_file_size=1G
innodb_buffer_pool_size=4G

Solo hay que tener en cuenta que innodb_log_file_size debe ser el 25% de innodb_buffer_pool_size, podemos cambiar los valores siempre y cuando se respete la proporción entre cada uno de ellos, luego solo reiniciamos el servicio:

service mariadb start

Importamos nuevamente las base de datos:

mysql < /tmp/dump.sql

Como vemos es bastante simple aunque no se lo recomiendo para inexpertos, cualquier consulta que tengas puedes dejar la en la caja de comentarios

Entradas recientes

Estadisticas de EasyMySQL

Normalmente, a las estadísticas del blog no le presto demasiada atención, sin embargo, trabajando en…

6 days hace

Nueva pagina de Publicaciones

La idea principal detrás de este blog es marca personal, el blog es para centralizar…

2 weeks hace

Migrar una maquina virtual desde VirtualBox a KVM

El migrar el disco duro es bastante sencillo como se verá a continuación, la principal…

3 weeks hace

Instalar QEMU/KVM y Virtual Machine Manager

Cuando se trata de virtualización en el escritorio, una de las primeras opciones son sin…

1 month hace

Instalar adaptador WIFI TP-Link AX 1800/ Archer TX20U en Debian y Ubuntu

Siempre he sido un ferviente defensor de una conexión por cable UTP para trabajar por…

2 months hace

Nuevo dominio para el blog, otra vez!!!

Al fin pude recuperar alvarodeleon.com, no es que lo hubiera perdido, fue peor, lo deje…

3 months hace