Tengo una tabla MySQL que usa el motor de almacenamiento InnoDB; Contiene aproximadamente 2 millones de filas de datos. Cuando eliminé filas de datos de la tabla, no liberó el espacio en disco asignado. Tampoco se redujo el tamaño del archivo ibdata1 después de ejecutar el optimize table
comando.
¿Hay alguna forma de recuperar espacio en disco de MySQL?
Estoy en una mala situación; esta aplicación se ejecuta en aproximadamente 50 ubicaciones diferentes y ahora aparece el problema de poco espacio en disco en casi todas ellas.
mysql
innodb
delete-row
Sumit Deo
fuente
fuente
innodb_file_per_table
está apagado. La buena noticia es que esta opción estáon
predeterminada en las versiones recientes de MySQL.Respuestas:
MySQL no reduce el tamaño de ibdata1. Nunca. Incluso si usa
optimize table
para liberar el espacio utilizado de los registros eliminados, lo reutilizará más tarde.Una alternativa es configurar el servidor para usar
innodb_file_per_table
, pero esto requerirá una copia de seguridad, descartar la base de datos y restaurar. El lado positivo es que el archivo .ibd para la tabla se reduce después de unoptimize table
.fuente
ALTER TABLE t ENGINE=INNODB
en la tabla existente. " Esto implica que puede activar esta función, "convertir" las tablas existentes para usar un archivo InnoDB separado con el comando ALTER TABLE, luego OPTIMIZAR la tabla para reducir su tamaño. Sin embargo, una vez que haya terminado, tendría que descubrir cómo eliminar el (enorme) archivo InnoDB de origen ...Acabo de tener el mismo problema yo mismo.
Lo que sucede es que, incluso si elimina la base de datos, innodb aún no liberará espacio en disco. Tuve que exportar, detener mysql, eliminar los archivos manualmente, iniciar mysql, crear bases de datos y usuarios, y luego importar. Gracias a Dios, solo tenía 200 MB de filas, pero ahorró 250 GB de archivos innodb.
Fallar por diseño.
fuente
Si no usa innodb_file_per_table , es posible recuperar espacio en disco, pero bastante tedioso, y requiere una cantidad significativa de tiempo de inactividad.
El Cómo es bastante profundo, pero pegué la parte relevante a continuación.
Asegúrese de conservar también una copia de su esquema en su volcado.
fuente
Diez años después y tuve el mismo problema. Lo resolví de la siguiente manera:
Eso es todo :)
fuente
Otra forma de resolver el problema de la recuperación del espacio es, crear múltiples particiones dentro de la tabla - Particiones basadas en el rango, basadas en el valor y simplemente soltar / truncar la partición para reclamar el espacio, lo que liberará el espacio utilizado por todos los datos almacenados en la partición particular.
Habrá algunos cambios necesarios en el esquema de la tabla cuando introduzca la partición de su tabla, como: claves únicas, índices para incluir la columna de partición, etc.
fuente
El año pasado también enfrenté el mismo problema en la versión mysql5.7 e ibdata1 ocupó 150 Gb. así que agregué deshacer espacios de tabla
Realice la copia de seguridad de Mysqldump
Detenga el servicio de mysql
Elimine todos los datos del directorio de datos
Agregue a continuación el parámetro deshacer tablespace en my.cnf actual
Iniciar mysql service
store mysqldump backup
Problema resuelto !!
fuente
Hay varias formas de recuperar el espacio en disco después de eliminar datos de la tabla para el motor MySQL Inodb
Si no utiliza innodb_file_per_table desde el principio, deshacerse de todos los datos, eliminar todos los archivos, volver a crear la base de datos e importar datos nuevamente es la única forma (verifique las respuestas de FlipMcF arriba)
Si está utilizando innodb_file_per_table, puede intentar
fuente