¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Administración de MySQL
Estructura interna
Toda la información que maneja el servidor se encuentra en un mismo directorio de datos. En Windows esta ubicación suele ser C:\mysql\data.
Si no es así, hay dos formas de encontrarlo:
- Utilizando el comando mysqladmin variables | more y comprobando el directorio que se indica, para la variabla datadir.
- Realizando una búsqueda convencional de los archivos con extensión *.frm, que forman parte de cualquier instalación de mysql.
Dentro el directorio de datos, la información se encuentra organizada en una estructura jerárquica de árbol. Existe una carpeta correspondiente a cada base de datos (con su mismo nombre), y dentro de cada una, se encuentran los archivos correspondientes de cada tabla.
Arquitecturas de almacenamiento de tablas
Las tablas pueden estar almacenadas de diferentes formas, incluso dentro de una misma base de datos. Cada tipo de tabla, afecta en el espacio que consumen en memoria y disco, y en la velocidad de ejecución de las sentencias MySQL.
A continuación se detallan los diferentes tipos de tablas:
MyISAM
Versión mejorada de estructura ISAM. Cada tabla de la base de datos existe como tres archivos:
- Archivo de formulario, o descripción (.frm): Describe la estructura de la tabla (columnas, tipo de columnas, etc).
- Archivo de datos (.MYD): Contiene las filas de la tabla.
- Archivo de índice (.MYI): Contiene los índices que se han creado sobre el archivo de datos.
Cuando se ejecuta una sentencia CREATE, se crean los tres archivos, aunque algunos estén vacíos.
Existen diferentes opciones de almacenamiento para tablas ISAM:
- fixed: Indica que los datos tendrán longitud fija. Se selecciona de forma automática, si no hay columnas de tipo VARCHAR, TEXT o BLOB. Si se especifica la opción ROW_FORMAT=FIXED, las columnas de longitud variable, pasan a tener longitud fija. Los índices asociados a este tipo de tablas son más pequeños, rápidos y eficientes. Además son tablas que no generan fragmentación.
- dinamic: Indica que los datos tendrán longitud variable, por lo que cada fila tiene una cabecera indicando su longitud. Se selecciona de forma automática, si hay columnas de tipo VARCHAR, TEXT o BLOB, o si se crea con la opción ROW_FORMAT=DYNAMIC. Todas las columnas de cadena son de longitud variable, incluso CHAR cuando pasa de 4 caracteres. Este tipo de almacenamiento ahorra espacio en disco, pero los DELETES y UPDATES generan fragmentación, por lo que cada cierto tiempo conviene pasar un proceso de desfregmentación, a través de la sentencia:
OPTIMIZE TABLE NombreTabla;
O a través de la utilidad myisamchk, que se encuentra como programa ejecutable, dentro de la carpeta /bin.
- Compressed: Formato de tablas de solo lectura, generado por la utilidad myisampack, que se encuentra en la carpeta /bin de la distribución de MySQL. Se caracterizan por el ahorro de espacio en el disco y es conveniente para dispositivos de almacenamiento lentos como los CD-ROM.
Ejemplo de uso:
C:\mysql\bin>myisampack ..\data\NombreBaseDatos\NombreTabla # Para crear la tabla C:\mysql\bin>myisamchk -u ..\data\NombreBaseDatos\NombreTabla # Para crear la tabla # Para obtener la tabla original, en formato lectura-escritura
- MERGE: Estas tablas no tienen datos por si mismas, sino que hacen referencia a dos o más tablas tipo MyISAM a través de la cláusula UNION. Podemos realizar las diferentes acciones, bien a través de la tambla tipo MERGE, o de las tablas originales. Generan dos ficheros: uno con extensión .frm y otro con extensión .MRG.\\Las tablas de este tipo, deben ser idénticas en estructura. Borrar una tabla tipo MERGE, no afecta a las tablas que la conforman.
- MEMORY (HEAP): Se caracterizan por almacenar todos los datos en memoria. Si se reinicia el servidor, todos los datos se pierden (no así su estructura). Estas tablas son extremadamente rápidas, y son muy útiles para crear tablas temporales. Sólo guardan un fichero con extensión .frm que almacena la estructura de la tabla.
- InnoDB: Es un motor de bases de datos muy completo que ha sido embebido dentro de MySQL. Sus principales características son:
- Control de transacciones.
- Integridad referencial.
- Bloqueo a nivel de filas (en vez de bloquear la tabla entera, como ocurre con MyISAM).
- SELECT sin bloqueo, lo que genera un aumento del rendimiento.
InnoDB, a diferencia que MyISAM, almacena todos los datos e índices de todas las tablas de todas las bases de datos en un mismo tablespace, que consiste en un número reducido de archivos del sistema operativo formado por ficheros de datos (data files) y ficheros de log (log files).
Por defecto, InnoDB crea un archivo de datos llamado ibdata1 de 10MB autoextensible y dos archivos de log llamados ib_logfile0 y ib_logfile1, todos ellos en el directorio de datos de MySQL. Por ello InnoDB sólo crea por cada tabla un fichero de descripción de la tabla con extensión .frm. Los datos e índices quedan en el tablespace definido.
Para pasar tablas de un tipo a otro, se puede hacer sin problema (siempre que se tengan los privilegios adecuados), a través de la sentencia:
ALTER TABLE NombreTabla TYPE=TipoTabla;
