it-swarm-es.com

¿Cuál es el archivo ibdata1 en mi directorio / var / lib / mysql?

Al iniciar sesión en mi panel de control de Webmin, noté que prácticamente todo el espacio de mi disco está lleno. Busqué los diez archivos/directorios más grandes en mi sistema y descubrí que un archivo llamado ibdata1 ocupa alrededor de 94 GB de espacio. Reside en mi directorio/var/lib/mysql.

¿Qué hace ibdata1? ¿Estoy seguro de eliminarlo? Mi suposición es que es un tipo de basura, pero eso es una suposición descabellada.

34
James

El archivo ibdata1 Es el espacio de tabla del sistema para la infraestructura de InnoDB.

Contiene varias clases de información vital para InnoDB

  • Páginas de datos de tabla
  • Páginas de índice de tabla
  • Diccionario de datos
  • Datos de control de MVCC
    • Deshacer espacio
    • Segmentos de reversión
  • Memoria intermedia de doble escritura (páginas escritas en segundo plano para evitar el almacenamiento en caché del sistema operativo)
  • Insertar búfer (cambios en los índices secundarios)

Tenga en cuenta el lugar de ibdata1 en el universo InnoDB (en el lado derecho)

InnoDB Architecture

Puede separar las páginas de datos e índices de ibdata1 Habilitando innodb_file_per_table . Esto hará que cualquier tabla InnoDB recién creada almacene datos e páginas de índice en un archivo externo .ibd.

Ejemplo

  • datadir es/var/lib/mysql
  • CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;, crea /var/lib/mysql/mydb/mytable.frm
    • innodb_file_per_table habilitado, páginas de datos/índice almacenadas en /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table deshabilitado, Páginas de datos/índice almacenadas en ibdata1

No importa dónde esté almacenada la tabla InnoDB, la funcionalidad de InnoDB requiere buscar metadatos de tabla y almacenar y recuperar [~ # ~] mvcc [~ # ~] información para soportar Cumplimiento de ACID y Aislamiento de transacción .

Aquí están mis artículos anteriores sobre la separación de datos de tablas e índices de ibdata1

QUE HACER SIGUIENTE

Puede continuar teniendo ibdata1 almacenado todo, pero eso hace que hacer instantáneas LVM sea un trabajo pesado (mi opinión personal).

Debe utilizar la publicación My StackOverflow y reducir ese archivo de forma permanente.

Por favor ejecute esta consulta:

SELECT 
    ((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;

Esto indicará cuánto espacio desperdiciado se puede reclamar después de aplicar la limpieza de InnoDB.

39
RolandoMySQLDBA

Ese archivo es ibdata1, no ibdatal y contiene todas sus bases de datos InnoDB. Si lo elimina, pierde todos sus datos.

Para algunas ideas sobre cómo tratarlo, vea Cómo reducir/purgar el archivo ibdata1 en MySQL .

8
Michael Hampton

Si usa innodb como motor MySQL por defecto almacenará todos sus bases de datos en ibdata1. También hay archivos de registro ib_logfile0 e ib_logfile1. No elimine esos archivos.

2
silviud