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
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)
复制代码
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.
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.
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
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.
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
复制代码
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.