Resumen de la estructura de tablas y almacenamiento de datos en diferentes versiones de MySQL

En este artículo, tratamos de estudiar la forma de almacenamiento de archivos de base de datos bajo el motor Innodb y el motor MyISAM de MySQL en las versiones 5.7 y 8.0.

Los motores de almacenamiento como InnoDB y MyISAM almacenan tablas en discos, y la estructura utilizada por el sistema operativo para administrar discos se denomina sistema de archivos. En otras palabras, los motores de almacenamiento como InnoDB y MyISAM almacenan tablas en el sistema de archivos. Cuando queramos leer datos, estos motores de almacenamiento leerán los datos del sistema de archivos y nos los devolverán. Cuando queramos escribir datos, estos motores de almacenamiento volverán a escribir los datos en el sistema de archivos.

【1】MySQL5.7

① Motor InnoDB

Como se muestra en la figura a continuación, seleccionamos aleatoriamente una base de datos para ver y podemos ver que hay tres formatos de archivo: opt, frm e ibd.

opt: contiene varios atributos de la base de datos, como el juego de caracteres y las reglas de comparación de la base de datos.

frm: almacena la estructura de la tabla y es un archivo de formato binario.

La estructura de la tabla es el nombre de la tabla, cuántas columnas hay en la tabla, el tipo de datos, las restricciones y los índices de cada columna, el juego de caracteres utilizado y las reglas de comparación y otra información, todo lo cual se refleja en la creación de nuestra tabla. declaración

ibd: Espacio de tabla independiente, que almacena los datos e índices de la tabla.

inserte la descripción de la imagen aquí

MiISAM

Como se muestra a continuación, hay cuatro formatos de archivo: opt, frm, MYD, MYI. Se puede ver que la diferencia con InnoDB es que aquí no hay un archivo ibd, pero está dividido en MYD y MYI.

MYD : archivo de datos de la tabla.

MYI : archivo de índice de tabla.

También se puede ver desde aquí que MYISAM almacena archivos de datos e índices por separado, mientras que InnoDB almacena archivos de índices como archivos de datos.
inserte la descripción de la imagen aquí

【2】MySQL8

① InnoDB

Como se muestra a continuación, solo hay archivos ibd y nada más. Es decir, la información de la base de datos, la estructura de la tabla, los datos de la tabla y los índices de la tabla se almacenan en el archivo ibd.

inserte la descripción de la imagen aquí

MYISAM

Creamos una tabla MYIASM, insertamos datos y vemos el archivo de almacenamiento de datos de la siguiente manera:

inserte la descripción de la imagen aquí

Puede ver que tiene tres archivos: sdi, MYD y MYI. sdi es equivalente al archivo frm que mencionamos anteriormente, y también almacena información sobre la estructura de la tabla.

③ sobre sdi

En MySQL8 podemos ver que no hay ningún .frmarchivo, entonces, ¿dónde fue? Simplemente colóquelo en el archivo sdi. Oracle oficial (MySQL8 pertenece a Oracle) mueve la información del archivo frm y más información a la información del diccionario serializado (Serialized Dictionary Information, SDI) SDI está escrito dentro del archivo ibd bajo InnoDB.

Para extraer información SDI de archivos ibd, Oracle proporciona una aplicación ibd2sdi. No es necesario descargar esta herramienta, MySQL8 viene con ella, siempre que las variables de entorno estén configuradas, se puede usar.

Podemos ir al directorio donde se encuentra almacenado el archivo ibd y ejecutar el siguiente comando:

ibd2sdi --dump-file=tb_sys_admin.txt tb_sys_admin.ibd

inserte la descripción de la imagen aquí

[3] Espacio de mesa

InnoDB en realidad usa páginas como la unidad básica para administrar el espacio de almacenamiento y el tamaño de página predeterminado es de 16 KB. Para el motor de almacenamiento InnoDB, cada índice corresponde a un árbol B+, y cada nodo del árbol B+ es una página de datos, y las páginas de datos no necesitan ser físicamente continuas, porque hay una lista doblemente enlazada entre las páginas de datos. mantener el orden de estas páginas.

Los nodos de hoja del índice agrupado de InnoDB (es decir, el archivo de índice de clave principal) almacenan registros de usuario completos.

Para gestionar mejor estas páginas, InnoDB propone un 表空间concepto 文件空间de (espacio de tablas o espacio de archivos). Este espacio de tablas es un concepto abstracto, que puede corresponder a uno o más archivos reales en el sistema de archivos (el número de archivos correspondientes a diferentes espacios de tablas puede ser diferente). Cada espacio de tabla se puede dividir en muchos , y los datos de nuestra tabla se almacenan en 表空间algunos debajo de uno .

① Espacio de tablas del sistema

De forma predeterminada, InnoDB creará un archivo llamado ibdata1 con un tamaño de 12M en el directorio de datos. Este archivo es la representación del espacio de tablas del sistema correspondiente en el sistema de archivos. Es un archivo autoexpandible y aumentará su tamaño cuando no sea suficiente.

Podemos configurar las rutas de archivo correspondientes y sus tamaños cuando se inicia MySQL, por ejemplo, my.cnf se configura de la siguiente manera:

[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend

De esta forma, estos dos archivos 512M se crearán como tablespace del sistema después de que se inicie MySQL, y autoextend indica que si estos dos archivos no son suficientes, el tamaño del archivo data2 se ampliará automáticamente.

Una cosa a tener en cuenta es que en un servidor MySQL, solo hay una copia del espacio de tablas del sistema. En cada versión de MySQL5.5.7 a MySQL5.6.6, los datos de nuestra tabla se almacenarán en este espacio de tablas del sistema de forma predeterminada.

② espacio de tabla independiente (file-per-table-tablespace)

En MySQL5.6.6 y versiones posteriores, InnoDB no almacena los datos de cada tabla en el table space del sistema por defecto, sino que crea un table space independiente para cada tabla, es decir cuantas tablas hemos creado, hay como tantos espacios de mesa independientes como los hay.

.ibdSi utiliza un espacio de tabla independiente para almacenar datos de la tabla, se creará un archivo que representa el espacio de tabla independiente en el subdirectorio correspondiente a la base de datos a la que pertenece la tabla.El nombre del archivo es el mismo que el nombre de la tabla, pero una extensión de está agregado.

③ Configuración del espacio de tabla del sistema y el espacio de tabla independiente

Podemos especificar si usar el espacio de tabla del sistema o un espacio de tabla independiente para almacenar datos. Esta función está innodb_file_per_tablecontrolada por parámetros de inicio. Por ejemplo, si queremos almacenar deliberadamente todos los datos de la tabla en el espacio de tabla del sistema, podemos configurarlo así al iniciar el servidor MySQL:

[server]
innodb_file_per_table=0 # 0 : 使用系统表空间;1 : 使用独立表空间

El valor predeterminado es 1, puede usar el siguiente comando para ver:

show variables  like '%innodb_file_per_table%'

La modificación de este parámetro surte efecto en las tablas recién creadas, pero no en las tablas a las que se han asignado espacios de tabla. Si queremos transferir una tabla que ya existe en el tablespace del sistema a un tablespace independiente, podemos usar la siguiente sintaxis:

alter table 表名 tablespace [=] innodb_file_per_table;

O transfiera una tabla que ya existe en un tablespace independiente al tablespace del sistema, puede usar la siguiente sintaxis:

alter table 表名 tablespace [=] innodb_system;

④ Otros tipos de espacios de tablas

Con el desarrollo de MySQL, además de los dos espacios de tabla anteriores, ahora se proponen algunos tipos diferentes de espacios de tabla, como espacio de tabla general (espacio de tabla general), espacio de tabla temporal (espacio de tabla temporal), etc.

Supongo que te gusta

Origin blog.csdn.net/J080624/article/details/72866822/
Recomendado
Clasificación