Mysql Sin espacio en disco
Revisión del 11:49 12 oct 2017 de Wiki (discusión | contribuciones)
- Imaginemos que el disco donde estamos trabajando se queda sin espacio.
- Tenemos que averiguar quien está ocupando todo el espacio.
- Una forma rápida de averiguarlo es desde la consola con la orden: find /var/lib/mysql -type f -size=+100000k
- En este ejemplo podemos ver que archivos están ocupando más de 100MB en el directorio donde se encuentran las bases de datos de Mysql.
- Después podemos comprobar el tamaño real que ocupa una tabla desde Mysql, con la orden:
1 set @DB_NAME='employees'; 2 set @TABLE_NAME='salaries'; 3 SELECT table_name AS "Table", round(((data_length + index_length) / 1024 / 1024 / 1024), 2) "Size in GB" FROM information_schema.TABLES WHERE table_schema = @DB_NAME AND table_name = @TABLE_NAME;
- Siendo DB_NAME el nombre de la base de datos a buscar.
- y TABLE_NAME, el nombre de la tabla.
- Para saber cual es el motor de una tabla en concreto podemos ejecutar la orden:
1 SHOW TABLE STATUS WHERE Name = 'salaries';
- Siendo 'salaries' la tabla a buscar dentro de la base de datos activa.
- Si estamos a utilizar el motor de almacenamiento innodb, cada tabla va a tener sus propios archivos de datos y puede ser que alguno de ellos haya crecido por una inserción masiva de datos y posteriormente, aunque eliminemos las filas, el tamaño del archivo 'físico' no disminuye.
- Si queremos 'recuperar' todo ese espacio, podemos ejecutar la orden optimize table:
1 optimize table salaries;
- Siendo 'salaries' la tabla a optimizar.
- Lo que hace básicamente esta orden es crear una nueva tabla y pasar todos los datos, creando un nuevo fichero .ibd en el proceso.
- Otra forma de hacerlo sería con la orden:
1 alter table salaries engine 'InnoDB';
- Pero cuidado, ya que si la tabla es de tipo MyIsam estaríamos cambiando el motor de la tabla a InnoDB.
-- Ángel D. Fernández González -- (2017).