42 votos

¿Qué hace el archivo ibdata1 en mi directorio /var/lib/mysql ?

Para entrar en mi panel de control Webmin, me di cuenta de que casi todo mi espacio en disco está lleno. He buscado por los diez más grandes archivos/ directorios en mi sistema y encontré que un archivo llamado ibdata1 está ocupando alrededor de 94GB de espacio. Reside en mi directorio /var/lib/mysql .

¿Qué hace ibdata1? Es seguro quitarlo? Mi suposición es que sea un volcado de algún tipo, pero eso es sólo una conjetura.

43voto

RolandoMySQLDBA Puntos 10660

El archivo ibdata1 es el espacio de tablas del sistema para la infraestructura InnoDB.

Contiene varias clases de información vital para InnoDB

  • Páginas de datos de la tabla
  • Páginas del índice de la tabla
  • Diccionario de datos
  • Datos de control de MVCC
    • Deshacer el espacio
    • Segmentos de retroceso
  • Doble búfer de escritura (páginas escritas en segundo plano para evitar el almacenamiento en caché del sistema operativo)
  • buffer de inserción (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 y de índice de ibdata1 al permitir innodb_file_per_table . Esto hará que cualquier tabla InnoDB recién creada almacene los datos y las páginas de índice en un .ibd archivo.

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/índices almacenadas en /var/lib/mysql/mydb/mytable.ibd
    • innodb_file_per_table desactivado, páginas de datos/índices almacenadas en ibdata1

No importa dónde se almacene la tabla InnoDB, la funcionalidad de InnoDB requiere buscar los metadatos de la tabla y almacenar y recuperar MVCC información de apoyo Cumplimiento de ACID y Aislamiento de las transacciones .

Aquí están mis artículos anteriores sobre la separación de los datos de la tabla y los índices de ibdata1

QUÉ HACER A CONTINUACIÓN

Puedes seguir teniendo ibdata1 almacenado todo, pero eso hace que hacer snapshots de LVM sea una verdadera pesadez (mi opinión personal).

Tienes que usar el post de My StackOverflow y reducir ese archivo permanentemente.

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 dirá cuánto espacio desperdiciado se puede recuperar después de aplicar la limpieza de InnoDB.

0 votos

Gracias por tu aportación. Mi cuota de disco se ha llenado por completo - antes de actuar en cualquiera de los consejos en sus puestos, voy a necesitar espacio libre? He observado que tu mensaje original sobre el SO menciona la posibilidad de hacer un volcado de SQL, pero esto presumiblemente crearía un archivo de ~90 GB sin ningún lugar al que ir.

0 votos

Mysqldump sólo la representación lógica de las páginas de datos, no los índices. Necesitará otro montaje de disco, tal vez un servidor remoto, para volcar los datos.

9 votos

Me devuelve 91.25350952148438 como SpaceToReclaim . ¿Esto es en megabytes? ¿en porcentaje? ¿en bytes?

9voto

Michael Hampton Puntos 88271

Ese archivo es ibdata1 no ibdatal y contiene todas sus bases de datos InnoDB. Si lo borras, pierdes todos tus datos.

Para ver algunas ideas sobre cómo afrontarlo, consulte Cómo reducir/purgar el archivo ibdata1 en MySQL .

3voto

silviud Puntos 1826

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

0 votos

¿Qué es borrar ese archivo en mi servidor?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: