sql >> Base de Datos >  >> RDS >> Mysql

Cómo reducir/purgar el archivo ibdata1 en MySQL

Que ibdata1 no se está reduciendo es una característica particularmente molesta de MySQL. El ibdata1 el archivo no se puede reducir a menos que elimine todas las bases de datos, elimine los archivos y vuelva a cargar un volcado.

Pero puede configurar MySQL para que cada tabla, incluidos sus índices, se almacene como un archivo separado. De esa manera ibdata1 no crecerá tanto. Según Comentario de Bill Karwin esto está habilitado de forma predeterminada a partir de la versión 5.6.6 de MySQL.

Hace un tiempo hice esto. Sin embargo, para configurar su servidor para usar archivos separados para cada tabla, debe cambiar my.cnf para habilitar esto:

[mysqld]
innodb_file_per_table=1

https://dev.mysql .com/doc/refman/5.6/en/innodb-file-per-table-tablespaces.html

Como desea recuperar el espacio de ibdata1 en realidad tienes que borrar el archivo:

  1. Haga un mysqldump de todas las bases de datos, procedimientos, activadores, etc. excepto mysql y performance_schema bases de datos
  2. Eliminar todas las bases de datos excepto las 2 bases de datos anteriores
  3. Detener mysql
  4. Eliminar ibdata1 y ib_log archivos
  5. Iniciar mysql
  6. Restaurar desde volcado

Cuando inicia MySQL en el paso 5, ibdata1 y ib_log los archivos se volverán a crear.

Ahora estás listo para ir. Cuando crea una nueva base de datos para el análisis, las tablas se ubicarán en ibd* separados archivos, no en ibdata1 . Como suele soltar la base de datos poco después, ibd* los archivos serán eliminados.

http://dev.mysql.com/doc/refman /5.1/es/drop-database.html

Probablemente haya visto esto:
http://bugs.mysql.com /bug.php?id=1341

Usando el comando ALTER TABLE <tablename> ENGINE=innodb o OPTIMIZE TABLE <tablename> uno puede extraer datos y páginas de índice de ibdata1 a archivos separados. Sin embargo, ibdata1 no se reducirá a menos que realice los pasos anteriores.

Con respecto al information_schema , que no es necesario ni posible soltar. De hecho, es solo un montón de vistas de solo lectura, no tablas. Y no hay archivos asociados con ellos, ni siquiera un directorio de base de datos. El informations_schema está utilizando el motor de base de datos de memoria y se descarta y se regenera al detener/reiniciar mysqld. Ver https://dev.mysql.com/doc/ refman/5.7/en/information-schema.html .