La relación entre Mysql y el sistema de archivos

Estoy participando en el "Programa de Vela · Nuggets"

La relación entre Mysql y el sistema de archivos

En Linux, el sistema de archivos se usa para administrar el disco, mientras que los motores de almacenamiento comúnmente utilizados de Mysql, como InnoDB y MyISAM, usan almacenamiento de archivos, que está naturalmente vinculado al sistema de archivos. Entonces, ¿dónde usa Mysql el sistema de archivos? Hablemos

directorio de datos mysql

El archivo de inicio del sistema Mysql (predeterminado my.cnf) puede especificar una variable de sistema global datadir de Mysql, esta variable puede especificar el directorio de almacenamiento de datos de Mysql, de la siguiente manera

imagen-20220906193958788.png

O consígalo en forma de una variable de consulta (todas las capturas de pantalla de demostración a continuación son de este directorio)

mysql> show variables like '%datadir%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| datadir       | /usr/local/mysql-5.7.26/data/ |
+---------------+-------------------------------+
1 row in set (0.00 sec)

复制代码

Estructura relacionada con el directorio de datos

estructura de almacenamiento de la base de datos

Cada vez que se crea una base de datos, se creará una carpeta con el mismo nombre que la base de datos en la ruta datadir predefinida.

mysql> create database test_data;
Query OK, 1 row affected (0.00 sec)

复制代码

imagen-20220906195252088.png

Después de crear la carpeta test_data, se creará un archivo db.opt en la carpeta, que se utiliza para almacenar los atributos de la base de datos, como el juego de caracteres y las reglas de comparación.

imagen-20220906195330216.png

Una cosa a la que debemos prestar atención son las cuatro bases de datos que vienen con el sistema: mysql (almacena información como los permisos de usuario de Mysql), information_schema (información de descripción de otras bases de datos), performance_schema (almacena el estado del tiempo de ejecución de Mysql, etc.), sys ( vista de rendimiento del servidor), se creará una carpeta excepto para information_schema.

almacenamiento de la estructura de la mesa

Por ejemplo, cree una nueva tabla para la base de datos test_data creada anteriormente

CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

复制代码

Luego, Mysql creará un nuevo archivo test_table.frm con el mismo nombre de tabla en la carpeta de la base de datos con el mismo nombre, es decir, test_data.Este archivo se utiliza para describir los campos, índices, restricciones, etc. de la tabla.

imagen-20220906200615556.png

almacenamiento de datos de tabla

Los datos de la tabla se almacenan en diferentes motores de almacenamiento y los archivos de almacenamiento son diferentes.Tome como ejemplo InnoDB y MyISAM, que se usan comúnmente.

Almacenamiento de datos de la tabla del motor de almacenamiento InnoDB

El motor de almacenamiento InnoDB administra el espacio de almacenamiento en unidades de páginas. El tamaño de una página de datos es de 16k. InnoDB introduce el concepto de espacio de tabla para facilitar la administración. Un espacio de tabla puede contener varias páginas de datos. Por supuesto, el espacio de tabla es divididos en Varios son los siguientes.

espacio de tablas del sistema

Desde Mysql versión 5.5.7 a 5.6.6, los datos de la tabla se colocan en el espacio de tabla del sistema de forma predeterminada. De forma predeterminada, la ubicación del directorio de datos generará automáticamente un archivo llamado ibdata1. El tamaño del archivo es de 12 M. De la siguiente manera

imagen-20220906224307504.png

El tamaño de este archivo no es fijo y puede crecer automáticamente, lo que significa que el archivo puede expandirse automáticamente cuando no se puede almacenar.

espacio de tabla independiente

Después de la versión 5.6.6 de Mysql, ya no se almacena en el espacio de tabla del sistema, sino que se almacena en un espacio de tabla independiente. Independencia significa que los datos entre tablas y tablas son independientes. Mysql creará un espacio independiente para cada tabla. Hay hay tantos espacios independientes como tablas, por lo que cuando ejecutamos la sentencia de creación de tablas

-- 默认InnoDB存储引擎
CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

复制代码

Se creará un nuevo archivo idb con el mismo nombre de tabla en el directorio con el mismo nombre que la base de datos actual.

imagen-20220906225024509.png

En cuanto a si el usuario quiere elegir el espacio de tablas del sistema o el espacio de tablas independiente, el usuario puede decidir por sí mismo innodb_file_per_table, lo puede lograr modificando las variables del sistema, si es 0 significa usar el espacio de tablas del sistema, y ​​si es 1, significa usar el espacio de tabla independiente. Lo que debe tenerse en cuenta aquí es modificar los parámetros del sistema. Solo tiene efecto para las tablas recién creadas. Las tablas antes de modificar los parámetros del sistema deben modificarse manualmente.

Almacenamiento de datos de la tabla del motor de almacenamiento MyISAM

La mayor diferencia entre el motor de almacenamiento MyISAM y el motor de almacenamiento InnoDB en el sistema de archivos es que MyISAM separa el índice y el archivo de datos. InnoDB enfatiza que el índice son ambos los datos, razón por la cual se describe la tabla del motor de almacenamiento MyISAM por tres archivos.

  • TableName.frm: Describe la estructura de la tabla, índices, restricciones, etc.

  • TableName.MYD: almacena los datos de la tabla.

  • tablename.MYI: índice de la tabla de almacenamiento.

Cree una tabla de prueba de la siguiente manera

CREATE TABLE `test_table_myisam` (
  `name` varchar(100) DEFAULT NULL
) ENGINE=MyISAM

复制代码

imagen-20220906230410960.png

almacenamiento de vista especial

create view view_test as select * from test_table;

复制代码

Debido a que una vista es esencialmente una tabla virtual, que es solo un alias para una declaración de consulta, los datos de la vista no se guardan durante el almacenamiento, sino solo la estructura de la tabla de la vista, por lo que crear una vista solo creará un archivo frm con el mismo nombre que la vista.

imagen-20220906201709888.png

Supongo que te gusta

Origin juejin.im/post/7147657045678751752
Recomendado
Clasificación