Mysql Sin espacio en disco

De MediaWiki
Revisión del 11:49 12 oct 2017 de Wiki (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda
  • 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).