The world's most popular open source database
En MySQL 5.0, se puede almacenar cada tabla InnoDB y
sus índices en su propio fichero. Esta característica se llama
“multiple tablespaces” (espacios de tablas múltiples)
porque, en efecto, cada tabla tiene su propio espacio de tablas.
El uso de múltiples espacios de tablas puede ser beneficioso para usuarios que desean mover tablas específicas a discos físicos separados o quienes deseen restaurar respaldos de tablas sin interrumpir el uso de las demás tablas InnoDB.
Se pueden habilitar múltiples espacios de tablas agregando esta línea a
la sección [mysqld] de my.cnf:
[mysqld] innodb_file_per_table
Luego de reiniciar el servidor, InnoDB almacenará
cada nueva tabla creada en su propio fichero
en el
directorio de la base de datos a la que pertenece la tabla. Esto es
similar a lo que hace el motor de almacenamiento
nombre_tabla.ibdMyISAM, pero MyISAM divide la
tabla en un fichero de datos
y el
fichero de índice
tbl_name.MYD. Para
tbl_name.MYIInnoDB, los datos y los índices se almacenan juntos
en el fichero .ibd. El fichero
se sigue
creando como es usual.
tbl_name.frm
Si se quita la línea innodb_file_per_table de
my.cnf y se reinicia el servidor,
InnoDB creará nuevamente las tablas dentro de los
ficheros del espacio de tablas compartido.
innodb_file_per_table afecta solamente la creación de
tablas. Si se inicia el servidor con esta opción, las tablas nuevas se
crearán empleando ficheros .ibd, pero aún se puede
acceder a las tablas existentes en el espacio de tablas compartido. Si se
remueve la opción, las nuevas tablas se crearán en el espacio
compartido, pero aún se podrá acceder a las tablas creadas en espacios
de tablas múltiples.
InnoDB siempre necesita del espacio de tablas
compartido. Los ficheros .ibd no son suficientes
para que funcione InnoDB. El espacio de tablas
compartido consiste de los ya conocidos ficheros
ibdata, donde InnoDB coloca su
diccionario de datos interno y los registros para deshacer cambios (undo
logs).
No se puede mover libremente ficheros
.ibd entre directorios de bases de datos
en la misma forma en que se hace con ficheros de tablas
MyISAM. Esto se debe a que la definición de las
tablas se almacena en el espacio de tablas compartido de
InnoDB, y también porque InnoDB
debe preservar la consistencia de los identificadores de transacciones y
los números de secuencia de registros (log).
Dentro de una determinada instalación MySQL, se puede mover un fichero
.ibd y las tablas asociadas de una base de datos a
otra con la conocida sentencia RENAME
TABLE:
RENAME TABLEnombre_bd_anterior.nombre_tablaTOnombre_bd_nuevo.nombre_tabla;
Si se tiene un respaldo “limpio” de un fichero
.ibd, se lo puede restaurar dentro de la
instalación MySQL de donde proviene del siguiente modo:
Utilizando esta sentencia ALTER TABLE:
ALTER TABLE nombre_tabla DISCARD TABLESPACE;
Precaución: Esto eliminará el actual
fichero .ibd.
Colocando el fichero .ibd nuevamente en el
directorio de la base de datos adecuada.
Utilizando esta sentencia ALTER TABLE:
ALTER TABLE nombre_tabla IMPORT TABLESPACE;
En este contexto, un respaldo “limpio”
de un fichero .ibd significa:
ç
El fichero .ibd no contiene modificaciones
realizadas por transacciones sin confirmar.
No quedan entradas sin combinar en el buffer de inserciones en el
fichero .ibd.
Se han quitado todos los registros de índice marcados para
eliminación en el fichero .ibd.
mysqld ha descargado todas las páginas
modificadas del fichero .ibd desde el buffer
pool hacia el fichero.
Se puede realizar un respaldo limpio del fichero
.ibd con el siguiente método:
Detener toda actividad del servidor mysqld y confirmar todas las transacciones.
Esperar hasta que SHOW INNODB STATUS indique que
no hay transacciones activas en la base de datos, y el estado del
subproceso (trhead) principal de InnoDB sea
Waiting for server activity (Esperando por
actividad del servidor). Entonces, se puede hacer una copia del
fichero .ibd.
Otro método para hacer una copia limpia de un fichero
.ibd es utilizar la herramienta comercial
InnoDB Hot Backup:
Utilizar InnoDB Hot Backup para respaldar la
instalación InnoDB.
Iniciar un segundo servidor mysqld sobre el
respaldo y permitirle limpiar los ficheros .ibd
del mismo.
Figura en la lista de pendientes (TODO) para permitir mover ficheros
.ibd limpios a otra instalación MySQL. Esto
necesita que se inicialicen los IDs (identificadores) de transacciones y
los números de secuencia de registros (log) en el fichero
.ibd.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

