Solución a archivo ibdata1 gigante con Mysql

Algunas veces ocurre que ibdata1 crece hasta limites exagerados y no podrá decrecer. Eso podría suponer un grave problema si llega a ocupar todo el espacio de la partición en la que se encuentre /var/lib/mysql/ .
  
Hoy me he encontrado un drupal con 40Gb de archivo ibdata1. Curioso ya que al realizar un dump comprimido en gz ocupaba unos 37Mb y sin comprimir unos 300.
  
Lo primero es hacer una copia de seguridad de la base de datos. Por ejemplo así:
  

mysqldump -u user -p'lapassword' --single-transaction --quick nombrebasededatos | gzip > db-pro-nombrebasededatos-20170619.sql.gz

  
Lo segundo es parar la base de datos. Por ejemplo así:

/etc/init.d/mysql stop

  
Lo tercero es borrar el archivo ibdata1 y sus logs:
  

rm -rf /var/lib/mysql/ibdata1
rm -rf /var/lib/mysql/ib_logfile0
rm -rf /var/lib/mysql/ib_logfile1

  
Lo cuarto comprobar que el archivo /etc/mysql/my.conf tenga esta línea:

innodb_file_per_table=1

  
Lo quinto es iniciar de nuevo mysql. /etc/init.d/mysql start
  
Cepillarnos la base de datos y crearla de nuevo:
  

mysql -u user -p'lapassword' -e "drop database nombrebasededatos;"
mysql -u user -p'lapassword' -e "create database nombrebasededatos;"

  
Lo sexto es importar el dump de la base de datos:
  

gzip -d db-pro-nombrebasededatos-20170619.sql.gz
mysql -u user -p'lapassword' nombrebasededatos < db-pro-nombrebasededatos-20170619.sql

  
Y con eso si todo va bien tendríamos de nuevo un archivo mucho más manejable.
  
De todas formas NO me hago responsable de como usas esta información.
  
Es posible comprobar que tablas son las más pesadas:
  

SELECT table_schema as `Database`, table_name AS `Table`, round(((data_length + index_length) / 1024 / 1024), 2) `Si
ze in MB`  FROM information_schema.TABLES  ORDER BY (data_length + index_length) ASC;

  
Y filtrar tambien para ver cuales hacen uso del motor innoDB:
  

SELECT COUNT(1) EngineCount,engine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY engine;

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *