16_Archivo de datos MySQL

archivos de información

Cada base de datos en MySQL tendrá una carpeta con el nombre de la base de datos en el directorio de datos definido (o predeterminado), que se utiliza para almacenar varios archivos de datos de tabla en la base de datos. Los diferentes motores de almacenamiento MySQL tienen sus propios archivos de datos diferentes. Por ejemplo, MyISAM usa ".MYD" como extensión, Innodb usa ".ibd", Archive usa ".arc", CSV usa ".csv", etc.

// Inicie sesión en mysql, cree una base de datos como t1 y cree una tabla en la base de datos

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

mysql> use t1;
Database changed
mysql> create table tt1 
    -> (
    -> id int,
    -> name char(22),
    -> info char(22),
    -> deptid int
    -> );
Query OK, 0 rows affected (0.01 sec)

// Verifique el directorio donde se encuentra la base de datos, y encontrará que hay una carpeta con el nombre de la base de datos en el directorio de datos.
Inserte la descripción de la imagen aquí
Vea la lista de archivos del directorio t1.
En la figura anterior, puede ver que la tabla usa el motor de almacenamiento innodb.

Modificar el motor de almacenamiento predeterminado de mysql

// Ver el comando del motor de almacenamiento mysql, el soporte es: Predeterminado significa el motor de almacenamiento predeterminado

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

// Establecer InnoDB como motor predeterminado
Agregue la oración default-storage-engine = INNODB en [mysqld] en el archivo de configuración my.cnf

[root@mysqld01 ~]# grep default /etc/my.cnf 
default-storage-engine=MyISAM 
[root@mysqld01 t1]# systemctl restart mysqld

//verificación

mysql> mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | DEFAULT | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

1. La información de metadatos (meta) relacionada con el archivo ".frm" y la tabla se almacena en el archivo ".frm", incluida la información de definición de la estructura de la tabla, etc. Independientemente del motor de almacenamiento (los dos motores de almacenamiento más utilizados para MySQL son MyISAM e InnoDB), cada tabla tendrá un archivo ".frm" con el nombre del nombre de la tabla. Todos los archivos ".frm" se almacenan en la carpeta de la base de datos.
Archivo de tabla de base de datos MyISAM: archivo .MYD: archivo de datos de tabla; archivo .MYI: archivo de índice

2. Archivos ".MYD" Los archivos ".MYD" están dedicados al motor de almacenamiento MyISAM y almacenan los datos de las tablas MyISAM. Cada tabla MyISAM tendrá un archivo ".MYD" correspondiente, que también se almacena en la carpeta de la base de datos a la que pertenece, junto con el archivo ".frm".

3. Archivo ".MYI" El archivo ".MYI" también es exclusivo del motor de almacenamiento MyISAM, y almacena principalmente información relacionada con el índice de la tabla MyISAM. Para el almacenamiento MyISAM, el contenido que se puede almacenar en caché es principalmente del archivo ".MYI". Cada tabla MyISAM corresponde a un archivo ".MYI", que se almacena en la misma ubicación que ".frm" y ".MYD".

InnoDB usa tablespace (tablespace) para administrar datos, almacenar datos de tablas e índices. Archivo .ibd: archivo de espacio de tabla de una sola tabla, cada tabla utiliza un archivo de espacio de tabla (archivo por tabla) para almacenar datos e índices de la tabla de la base de datos del usuario. Espacio de tabla compartido InnoDB (es decir, conjunto de archivos InnoDB, conjunto ibfile): ibdata1, ibdata2, etc., almacena información del sistema InnoDB y datos e índices de la tabla de la base de datos del usuario, compartidos por todas las tablas.

4. El archivo ".ibd" y el archivo ibdata son archivos que almacenan datos de Innodb. La razón por la que hay dos archivos para almacenar datos de Innodb (incluidos los índices) es que el método de almacenamiento de datos de Innodb se puede determinar mediante la configuración si se debe utilizar un espacio de tabla compartido para almacenar y almacenar datos, o para utilizar un espacio de tabla exclusivo para almacenar y almacenar datos. El método de almacenamiento de espacio de tabla exclusivo utiliza archivos ".ibd" para almacenar datos, y cada tabla tiene un archivo ".ibd", que se almacena en la misma ubicación que los datos MyISAM. Si elige un espacio de tabla de almacenamiento compartido para almacenar datos, usará un archivo ibdata para almacenarlo, y todas las tablas usan uno (o varios archivos ibdata autoconfigurables). El archivo ibdata se puede configurar mediante los dos parámetros innodb_data_home_dir e innodb_data_file_path. Innodb_data_home_dir configura el directorio general para el almacenamiento de datos e innodb_data_file_path configura el nombre de cada archivo. Se pueden configurar varios archivos ibdata en innodb_data_file_path a la vez. El archivo puede tener un tamaño específico o se puede expandir automáticamente, pero Innodb restringe solo el último archivo ibdata que se puede configurar como un tipo de expansión automática. Cuando necesitamos agregar un nuevo archivo ibdata, solo se puede agregar al final de la configuración innodb_data_file_path, y MySQL debe reiniciarse para completar la adición de ibdata. Pero si usamos el método exclusivo de almacenamiento de espacio de tabla, no habrá tal problema.

Resumen: los espacios de tabla compartidos y los espacios de tabla exclusivos se basan en la forma en que se almacenan los datos. Espacio de tabla compartido: todos los datos de tabla y los archivos de índice de una determinada base de datos se colocan en un archivo. Espacio de tabla exclusivo: cada tabla se generará y almacenará como un archivo independiente.Cada tabla tiene un archivo de descripción de tabla .frm y un archivo .ibd. Este archivo incluye el contenido de datos y el contenido de índice de una sola tabla. Las ventajas y desventajas entre los dos espacios de tabla compartidos: Ventajas: El espacio de tabla se puede dividir en varios archivos y almacenar en cada disco. Los datos y los archivos se agrupan para facilitar la gestión. Desventajas: todos los datos e índices se almacenan en un archivo, y varias tablas e índices se mezclan y almacenan en el espacio de la tabla, por lo que habrá muchos espacios en el espacio de la tabla después de una gran cantidad de operaciones de eliminación en una tabla, especialmente para el análisis estadístico, el sistema de valor diario es el menos adecuado para aplicaciones como el espacio de tabla compartido. Espacio de mesa independiente: Ventajas: 1. Cada mesa tiene su propio espacio de mesa independiente. 2. Los datos y los índices de cada tabla se almacenarán en su propio espacio de tabla. 3. Una sola tabla se puede mover en diferentes bases de datos. 4. Se puede recuperar espacio a) La operación de eliminación de tabla recupera automáticamente el espacio de la tabla Para análisis estadístico o tablas de valores diarios, después de eliminar una gran cantidad de datos, puede pasar: alter table TableName engine = innodb; para retirar el espacio no utilizado. b) Para las tablas que utilizan un espacio de tabla independiente, no importa cómo las elimine, la fragmentación del espacio de tabla no afectará seriamente el rendimiento y hay oportunidades para lidiar con ello. Desventajas: El aumento de una sola tabla es demasiado grande, como más de 100 G. En comparación, la eficiencia y el rendimiento de utilizar un espacio de tabla exclusivo serán mayores.

// Ver el tipo de gestión del espacio de tabla de la base de datos actual

mysql> show variables like '%innodb_file_per%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

ON significa administración de espacio de tabla independiente, OFF significa administración de espacio de tabla compartido; (para ver el método de administración de espacio de tabla de una sola tabla, debe verificar si cada tabla tiene un archivo de datos separado)

Configuración del espacio de tabla compartido de Innodb: Modifique el archivo my.cnf:

innodb_file_per_table=0
innodb_data_file_path=ibdata1:100M:autoextend
innodb_data_home_dir=/usr/local/mysql/data

Explicación del parámetro:
innodb_data_home_dir = "/ ruta /" El directorio donde se almacenan los archivos de la base de datos
innodb_log_group_home_dir = "/ ruta /" El directorio de almacenamiento de registros
innodb_data_file_path = ibdata1: 10M: autoextend Establecer un archivo de datos con un tamaño expandible de 10 MB (archivo de datos compartido ), Denominado ibdata1. No se proporciona la ubicación del archivo, por lo que el valor predeterminado está en el directorio de datos de MySQL.
innodb_file_per_table = 1 | 0 // 1 significa usar un espacio de tabla exclusivo, 0 significa usar un espacio de tabla compartido. Nota: InnoDB no crea un directorio, así que confirme que el "directorio de ruta configurado" existe antes de iniciar el servidor .

Reinicie el servicio mysqld
// mysqld no pudo iniciarse, verifique el registro de errores

#tail -20 /usr/local/mysql/data/mysqld.err

El contenido de la pantalla es el siguiente:

2019-12-29T06:53:44.635783Z 0 [ERROR] InnoDB: The Auto-extending innodb_system
data file '/usr/local/mysql/data/ibdata1' is of a different size 4864 pages
(rounded down to MB) than specified in the .cnf file: initial 6400 pages, max 0
(relevant if non-zero) pag

Nota: Las diferentes versiones de mysql informan errores ligeramente diferentes. Preste atención al contenido del registro de errores. En la pantalla del registro de errores, se puede ver que 6400 páginas están configuradas en el archivo /etc/my.cnf y el ibdata1 actual es 4864 páginas deben calcularse 4864/64 = 76. Modifique la configuración a `

innodb_data_file_path=ibdata1:76M:autoextend

Reinicie el servicio mysqld
Inicie mysql, ¡éxito!

Nota: Fórmula de cálculo: 64 páginas es equivalente a 1 M y 1 página es 16 KB. Si no conoce el tamaño de página de archivo predeterminado, puede verificarlo primero con du -hibdata1 y luego configurarlo;

Inicie sesión en mysql y ejecute mysql> muestre variables como '% innodb_file_per_table%';
luego, la tabla recién creada usará el espacio de tabla compartido.

mysql>  show variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
1 row in set (0.00 sec)

3.Documentos relacionados con la réplica:

1) El archivo master.info: El archivo master.info existe en el directorio de datos del esclavo, que almacena la información relevante del maestro del esclavo, incluida la dirección de host del maestro, el usuario de conexión, la contraseña de conexión, el puerto de conexión y la ubicación actual del registro Información como la ubicación del registro leído.
2) Los archivos de registro de relé e índice de registro de relé mysql-relay-bin.xxxxxn se utilizan para almacenar la información de registro binario leída por el subproceso de E / S en el lado esclavo desde el lado maestro, y luego leída del registro de relé por Hilo SQL en el lado esclavo Y analice la información de registro correspondiente, conviértala en la declaración SQL ejecutada por el maestro y luego aplíquela en el lado esclavo. La función del archivo mysql-relay-bin.index es similar a la de mysql-bin.index. También es la ruta absoluta de la ubicación de almacenamiento del registro de registro, pero lo que registra no es el registro binario, sino el Registro de relés.
3) Archivo Relay-log.info: similar a master.info, almacena la información relevante escrita en el registro del relé local a través del hilo de E / S esclavo. Para que el hilo SQL del lado Esclavo y ciertas operaciones de gestión puedan obtener la información relevante de la replicación actual en cualquier momento.
4. Otros documentos:

1) archivo de configuración del sistema El archivo de configuración del sistema de MySQL es generalmente my.cnf, que se almacena en el directorio "/ etc" de forma predeterminada. El archivo my.cnf contiene una variedad de opciones de parámetros (grupos), y cada grupo de parámetros pasa corchetes Se proporciona un nombre de grupo fijo. Por ejemplo, el grupo "[mysqld]" incluye los parámetros de inicialización cuando se inicia el servicio mysqld, y el grupo "[cliente]" incluye los parámetros que pueden ser leídos por el programa de herramientas del cliente.

2) El archivo pidfile es un archivo de proceso de la aplicación mysqld en un entorno Unix / Linux.Como muchos otros programas de servidor Unix / Linux, almacena su propio ID de proceso.

3) Archivo Socket El archivo Socket sólo está disponible en el entorno Unix / Linux. El usuario puede utilizar directamente Unix Socket para conectarse a MySQL en el entorno Unix / Linux en lugar de la red TCP / IP. Hay dos métodos de conexión para mysql. El que se usa comúnmente es tcp mysql -h mysql host ip -uroot -pxxx mysql -S /path/mysql.sock Nota: El método de conexión de socket Unix es más rápido que el método tcp, pero solo aplicable Tanto mysql como la aplicación están en la misma PC.

Supongo que te gusta

Origin blog.csdn.net/weixin_45310323/article/details/112253967
Recomendado
Clasificación