Colección completa de preguntas de entrevistas de MySQL para PHP (actualizada continuamente)

Tabla de contenido

1. Puntos de conocimiento del índice MySQL 

 1. ¿Qué es un índice?

2. Tipo de índice 

 3. La diferencia entre clave primaria e índice ordinario

4. ¿Cuál es la diferencia entre clave primaria, clave externa e índice?

5. Índice de pros y contras

6. Situación de falla del índice

7. ¿Cuáles son los principios para indexar tablas de datos?

8. ¿En qué circunstancias no es apropiado crear un índice? 

9. índice msyql volver a la tabla

 10. Principio de coincidencia del índice más a la izquierda 

11. La diferencia entre índice agrupado e índice no agrupado 

12. optimización del índice mysql

13. ¿Cuáles son las diferencias básicas entre MyISAM e InnoDB? ¿Cómo se implementa la estructura del índice?

14. MySQL utiliza la estructura de índice de árbol B+

2. Mecanismo de bloqueo

1. ¿Qué es una cerradura?

 2. ¿Qué tipos de bloqueos existen en MySQL?

3. ¿Qué es el bloqueo a nivel de fila? ¿Cómo implementar el bloqueo a nivel de fila en MySQL?

4. ¿Qué es el bloqueo a nivel de tabla? ¿Cómo implementar el bloqueo a nivel de tabla en MySQL?

 5. ¿Qué es el bloqueo a nivel de página? ¿Cómo implementar el bloqueo a nivel de página en MySQL?

6. ¿Qué son los candados compartidos y los candados exclusivos?

7. ¿Qué es un punto muerto? ¿Cómo evitar un punto muerto?

8. ¿Qué son el bloqueo optimista y el bloqueo pesimista?

9. ¿Qué es la detección y recuperación de interbloqueos?

10. ¿Qué es el nivel de aislamiento de transacciones? ¿Qué niveles de aislamiento de transacciones existen en MySQL?

11. ¿Qué es el bloqueo de espacios? ¿Cómo utilizar bloqueos de espacios en MySQL?

12. ¿Qué es el tiempo de espera para un punto muerto?

13. ¿Qué es un bloqueo giratorio? ¿Cuándo utilizar el bloqueo de giro?

14. ¿Qué es la granularidad de bloqueo? ¿Cómo elegir la granularidad de bloqueo adecuada?

15. ¿Qué son la actualización y degradación de bloqueo?

16. ¿Qué es un gráfico de punto muerto?

17. ¿Los bloqueos pesimistas y optimistas de msyql se clasifican como bloqueos compartidos o bloqueos exclusivos?

3. Conceptos básicos de MySQL

1. Explique qué es PDO en PHP.

 2. La diferencia entre mongodb y mysql

3. Proceso de ejecución de SQL

4. ¿Qué son las transacciones en la base de datos?

  5. La diferencia entre char y varchar

6. ¿Cuál es la diferencia entre una base de datos relacional y una base de datos no relacional?

 7. Describa brevemente las diferencias entre la unión izquierda, la unión derecha y la unión interna de MySQL.

8. ¿Cuál es la diferencia entre PDO y la extensión mysqli en PHP? ¿Qué extensión se debe utilizar para operar la base de datos?

9. Describa brevemente las diferencias de ejecución entre recuento (1), recuento (*) y recuento (nombre de columna).

10. Dónde, jion, límite, agrupar por, tener, etc., orden de ejecución

Cuarto, optimización de MySQL 

1. MySQL tiene más de 100 millones de datos en una sola tabla, ¿cómo optimizar la velocidad de consulta?

2. Cómo localizar SQL lento

3. Cómo dividir tablas y bases de datos en msyql 

4. Replicación maestro-esclavo de MySQL 

5. ¿Qué hacer si la CPU de la base de datos MySQL aumenta al 100%?

6. ¿Cómo realizar consultas por página después de dividir decenas de miles de millones de datos en tablas?

7. ¿Cómo optimizar el rendimiento de las consultas MySQL?

8. ¿Cómo optimizar la estructura de la tabla de MySQL?

9. ¿Cómo optimizar los parámetros de configuración de MySQL? ​​​​​​​

Cinco, seguridad mysql

1. ¿Qué es la inyección SQL y cómo prevenirla? 

 2. ¿Cómo proteger la seguridad de la base de datos MySQL?

3. ¿Cómo restringir el acceso a la base de datos MySQL?

4. ¿Cómo proteger datos confidenciales en la base de datos MySQL?


 

1. Puntos de conocimiento del índice MySQL 

 1. ¿Qué es un índice?
Estructura de datos ordenada para una búsqueda rápida
2. Tipo de índice 
  1. Índice normal: también conocido como índice no único, es el tipo de índice más básico. Crea una estructura de índice B-Tree normal en la columna de índice, que puede acelerar las consultas pero permite valores duplicados en la columna de índice.
  2. Índice único: un índice único crea una restricción única en la columna de índice para garantizar que el valor en la columna de índice sea único. A diferencia de los índices ordinarios, los índices únicos requieren que los valores en las columnas del índice no se puedan repetir. Si se viola la restricción de unicidad al insertar o actualizar datos, se producirá un error de conflicto de unicidad.
  3. Índice de clave principal: el índice de clave principal es un índice único especial que se utiliza para identificar de forma única cada fila de datos de la tabla. El índice de clave principal requiere que el valor de la columna de índice no pueda ser NULL y la restricción única se crea automáticamente. Una tabla sólo puede tener un índice de clave principal.
  4. Índice compuesto: un índice compuesto se refiere a un índice creado en varias columnas, también llamado índice de varias columnas. Al crear índices en varias columnas, puede mejorar el rendimiento de las consultas condicionales de varias columnas. El orden del índice compuesto es importante y debe utilizarse en el orden de las columnas del índice al realizar consultas.
  5. Índice de texto completo: el índice de texto completo se utiliza para la recuperación de contenido de texto completo. Puede crear índices en campos de texto para una búsqueda eficiente y coincidencia de palabras clave. El índice de texto completo admite coincidencias aproximadas y clasificación de palabras clave.
 3. La diferencia entre clave primaria e índice ordinario
El índice de clave principal es único y no puede estar vacío. 
El índice de clave principal se utiliza para identificar de forma única las filas de la tabla y tiene una alta eficiencia de consulta; el índice ordinario se utiliza para acelerar la consulta y es adecuado para columnas consultadas con frecuencia.
4. ¿Cuál es la diferencia entre clave primaria, clave externa e índice?
Clave primaria clave externa índice
definición Identifica de forma única un registro, no puede haber duplicados y no se permite que esté vacío. La clave foránea de una tabla es la clave primaria de otra tabla. Las claves foráneas pueden repetirse o tener valores nulos. Este campo no tiene valores duplicados, pero puede tener un valor nulo.
efecto Se utiliza para garantizar la integridad de los datos. Se utiliza para establecer relaciones con otras tablas. Es mejorar la velocidad de clasificación de consultas.
número Sólo puede haber una clave primaria Una tabla puede tener varias claves foráneas Una tabla puede tener múltiples índices únicos.
5. Índice de pros y contras
Establezca un directorio para mejorar la eficiencia de la recuperación de datos y reducir los costos de E/S de la base de datos. La clasificación de los datos de la cola de índice reduce los costos de clasificación de datos y el consumo de CPU. Demasiados índices y más espacio temporal utilizado también afectarán la velocidad de las 
actualizaciones y eliminaciones.
6. Situación de falla del índice
Usar o sin cada índice, como usar %,!⁼ y otras condiciones de consulta difusa no será válido. 
Si es una cadena, usar int para consultar no será válido. Se requieren comillas. 
Muy pocos datos 
. Utilice funciones o cálculos.
7. ¿Cuáles son los principios para indexar tablas de datos?

La indexación es uno de los medios importantes para mejorar el rendimiento de las consultas de la base de datos. Los siguientes son algunos principios de la indexación:

  1. Principio de unicidad: para claves primarias, restricciones únicas o columnas que deben ser únicas, se debe establecer un índice único. Esto garantiza la unicidad de los datos y acelera las operaciones de búsqueda en la columna.
  2. Principio de consulta frecuente: se deben crear índices para las columnas que se consultan con frecuencia. Esto puede acelerar la ejecución de consultas relacionadas y mejorar el rendimiento de las consultas de la base de datos.
  3. Principio de consulta condicional: se deben crear índices para las columnas que se utilizan con frecuencia en las condiciones de consulta. Esto puede acelerar las operaciones de consulta que cumplen las condiciones y mejorar la eficiencia de las consultas.
  4. Principio de consulta conjunta: para declaraciones de consulta que a menudo utilizan varias columnas como condiciones de consulta al mismo tiempo, se debe establecer un índice conjunto. Esto permite utilizar varias columnas como índice para mejorar la eficiencia de las consultas.
  5. Principio del volumen de datos: para tablas de datos más grandes, se deben crear índices. Debido a que los escaneos completos de tablas de datos grandes son muy costosos, la indexación puede acelerar las consultas.
  6. Principio de evitar demasiados índices: demasiados índices aumentarán el costo de mantenimiento de la base de datos y afectarán el rendimiento de las operaciones de inserción, actualización y eliminación de datos. Por lo tanto, se debe evitar la indexación excesiva y solo se deben crear los índices necesarios.
  7. Principios de tipo de datos: para tipos de texto o columnas largas, debe considerar cuidadosamente si desea crear un índice. Porque los índices de estas columnas ocuparán más espacio de almacenamiento y afectarán la eficiencia del índice. Los principios de indexación deben considerarse de manera integral en función de las necesidades comerciales específicas y las situaciones de consulta de bases de datos para lograr
8. ¿En qué circunstancias no es apropiado crear un índice? 

En algunos casos, la indexación puede no ser una buena elección. Aquí hay algunas consideraciones cuando no es aconsejable la indexación:

  1. La tabla de datos es muy pequeña: si la tabla de datos es muy pequeña, como solo unas pocas docenas de filas o menos, los beneficios de rendimiento de la indexación pueden ser muy limitados e incluso pueden causar una degradación del rendimiento. Por lo tanto, es posible que no sea necesaria la indexación en tablas pequeñas.
  2. La tabla de datos realiza con frecuencia una gran cantidad de operaciones de inserción, actualización y eliminación: la creación de un índice aumentará el costo de mantenimiento de la tabla de datos. Para una tabla de datos que realiza con frecuencia una gran cantidad de operaciones de inserción, actualización y eliminación, la El costo de mantenimiento del índice puede exceder el costo del índice. Mejoras en el rendimiento. En este caso, puede considerar si realmente es necesaria la indexación.
  3. Hay muy pocas consultas en la tabla de datos o hay muy pocas consultas que involucran campos de índice: si rara vez se consulta una tabla de datos, o hay muy pocas consultas que involucran campos de índice, entonces los beneficios de rendimiento de la indexación pueden ser muy limitados. En este caso, considere no indexar.
  4. Los valores de las columnas de la tabla de datos son básicamente únicos: si los valores de las columnas de la tabla de datos son básicamente únicos, el efecto de la indexación se reducirá porque el índice es menos selectivo. En este caso, considere no indexar.
  5. El rendimiento de las consultas es suficientemente bueno: si el rendimiento de las consultas de la tabla de datos es lo suficientemente bueno y no hay cuellos de botella de rendimiento obvios, es posible que no sea necesaria la indexación. En este caso, puede considerar no crear un índice para reducir la sobrecarga de mantenimiento de la base de datos. Es necesario considerar de manera integral si se deben establecer índices y qué índices se deben establecer en función de las necesidades comerciales específicas y las condiciones de consulta de la base de datos. Antes de tomar una decisión, puede utilizar las herramientas de optimización de consultas de su base de datos o realizar algunas pruebas para evaluar el impacto de la indexación.
9. índice msyql volver a la tabla

El índice de MySQL vuelve a la tabla significa que cuando se utiliza el índice para la consulta, si los resultados de la consulta necesitan obtener otros datos de columna en la tabla, deben obtenerse a través del índice de regreso a la tabla. Las siguientes son algunas instrucciones sobre las tablas de índice MySQL:

  • El respaldo de la tabla de índice es una técnica de optimización de consultas que mejora el rendimiento de las consultas al evitar el acceso directo a las filas de datos.
  • En el motor de almacenamiento InnoDB, los nodos hoja del índice agrupado (también llamado índice de clave primaria) almacenan los datos de toda la fila de datos, por lo que no es necesario volver a indexar la tabla.
  • Los nodos hoja del índice no agrupado (índice secundario) solo almacenan los valores de la columna de índice y la clave principal. Al consultar datos de otras columnas, debe realizar operaciones de retorno de tabla a través del valor de la clave principal.
  • Volver a indexar en la tabla agregará operaciones de E/S adicionales porque las filas de datos deben leerse aleatoriamente a través del valor de la clave principal.
  • Si los resultados de la consulta necesitan obtener más datos de columnas, el costo de volver a indexar la tabla será relativamente grande, lo que puede reducir el rendimiento de la consulta.
  • Puede evitar la sobrecarga de volver a indexar en la tabla sobrescribiendo el índice. Un índice de cobertura significa que el índice contiene todas las columnas requeridas para la consulta y los resultados de la consulta se pueden obtener directamente del índice sin la necesidad de operaciones de retorno de tabla.
  • Al diseñar la estructura y el índice de la tabla, puede considerar si necesita utilizar un índice de cobertura basado en la situación real para reducir el costo de indexar nuevamente a la tabla.
  • En el plan de ejecución de MySQL, puede determinar si se ha producido una operación de retorno de índice verificando si la columna Extra contiene Usando índice o Usando condición de índice. Cabe señalar que el impacto en el rendimiento de la indexación en la tabla variará según las condiciones de la consulta, la estructura de la tabla y el volumen de datos. En aplicaciones reales, las pruebas y la optimización deben realizarse de acuerdo con situaciones específicas para obtener un mejor rendimiento de las consultas.
  • El siguiente es un ejemplo que demuestra cómo utilizar un índice en una tabla: Supongamos que hay una userstabla nombrada con las siguientes columnas id: namey age. Entre ellos, idla clave principal. Para consultar la edad de un usuario llamado "John", puede utilizar la siguiente declaración SQL:
  • ​
    SELECT age
    FROM users
    WHERE name = 'John';
    
    ​

    Supongamos que namese crea un índice no agrupado en la columna con el nombre del índice idx_name. Para evitar volver a indexar en la tabla, puede utilizar un índice de cobertura:

    SELECT name, age
    FROM users
    WHERE name = 'John';

    En este caso, dado que el índice idx_namecontiene directamente los valores de namelas columnas y age, los resultados de la consulta se pueden obtener directamente del índice sin necesidad de realizar operaciones de retroceso en la tabla. Cabe señalar que las declaraciones SQL específicas pueden variar debido a diferentes estructuras de tablas y requisitos de consulta. En aplicaciones reales, es necesario ajustarlo y optimizarlo de acuerdo con condiciones específicas para obtener el mejor rendimiento de la consulta.

 10. Principio de coincidencia del índice más a la izquierda 

El principio de coincidencia del índice más a la izquierda es una regla de uso para los índices de bases de datos, lo que significa que en un índice compuesto (índice compuesto), si la condición de consulta solo involucra la columna de prefijo del índice compuesto, la base de datos puede usar el índice para consultas y optimización.

Específicamente, supongamos que hay un índice compuesto que contiene varias columnas A, B y C. Cuando la condición de consulta solo involucra la columna A o la columna A y la columna B, pero no la columna C, la base de datos puede usar este índice compuesto. filtración. Sin embargo, si la condición de consulta involucra la columna C pero no involucra la columna A o la columna A y la columna B, entonces no se utilizará el índice compuesto. La función de este principio es mejorar la eficiencia de la consulta a través del prefijo más a la izquierda, reducir el rango de escaneo del índice y así aumentar la velocidad de la consulta.

Por lo tanto, al diseñar un índice compuesto, es necesario seleccionar razonablemente el orden de las columnas del índice en función de los escenarios y necesidades de consulta reales, y colocar las columnas que se utilizan con frecuencia como condiciones de consulta al frente. Cabe señalar que el principio de coincidencia del índice más a la izquierda no se aplica a todas las bases de datos y diferentes sistemas de bases de datos pueden tener diferentes estrategias de implementación y optimización del índice. Por lo tanto, en un entorno de base de datos específico, se recomienda diseñar y optimizar índices en función de las características y características de rendimiento de la base de datos.

11. La diferencia entre índice agrupado e índice no agrupado 

El índice agrupado y el índice no agrupado son dos tipos de índices comunes en las bases de datos. Tienen algunas diferencias al almacenar y consultar datos.

  1. Método de almacenamiento:
    • Índice agrupado: los nodos hoja del índice agrupado almacenan todos los datos de las columnas de la tabla y organizan físicamente los datos de acuerdo con el orden de clasificación del índice. Cada tabla solo puede tener un índice agrupado, por lo que el índice agrupado determina el orden de almacenamiento físico de la tabla.
    • Índice no agrupado: los nodos hoja de un índice no agrupado almacenan los valores de las columnas del índice y punteros a las filas de datos reales. Una tabla puede tener varios índices no agrupados, que son independientes del orden físico en el que se almacenan las filas de datos.
  2. Eficiencia de la consulta:
    • Índice agrupado: dado que el índice agrupado determina el orden de almacenamiento físico de la tabla, cuando se utiliza el índice agrupado para consultas, puede acceder directamente a los datos en el orden del índice para mejorar la eficiencia de la consulta. Sin embargo, si las condiciones de la consulta no involucran columnas de índice agrupadas, aún se requiere un escaneo completo de la tabla.
    • Índice no agrupado: al realizar consultas utilizando un índice no agrupado, primero debe encontrar el puntero de fila correspondiente a través del índice y luego acceder a la fila de datos real según el puntero. Por lo tanto, la eficiencia de la consulta del índice no agrupado puede ser ligeramente menor que la del índice agrupado.
  3. Actualización del índice:
    • Índice agrupado: dado que el índice agrupado determina el orden de almacenamiento físico de la tabla, las operaciones de actualización en las columnas del índice agrupado pueden provocar un reordenamiento físico de los datos. Esto puede provocar la fragmentación de la página y aumentar la sobrecarga de actualización.
    • Índice no agrupado: en un índice no agrupado, las operaciones de actualización en las columnas del índice no provocan un reordenamiento físico de los datos porque las filas de datos reales se almacenan en un orden que es independiente del índice. Por lo tanto, los índices no agrupados tienen relativamente poca sobrecarga en las operaciones de actualización. Dependiendo del sistema de base de datos específico y del diseño de la tabla, elegir el tipo de índice apropiado puede mejorar la eficiencia de las consultas y el rendimiento de la actualización de datos. Normalmente, los índices agrupados son adecuados para columnas que se utilizan a menudo para consultas de rango, mientras que los índices no agrupados son adecuados para columnas que se utilizan a menudo para consultas de igualdad.
12. optimización del índice mysql
  1. Elija el tipo de índice apropiado: MySQL admite múltiples tipos de índice, incluido el índice B-Tree, el índice Hash y el índice de texto completo. Elija el tipo de índice apropiado según la situación real para mejorar la eficiencia de las consultas.
  2. Elija la columna de índice adecuada: la columna de índice debe ser una columna que se consulte con frecuencia, no una columna que se utilice con poca frecuencia. Al mismo tiempo, la selección de columnas de índice debe tener en cuenta la distribución de los datos y evitar seleccionar columnas con valores muy repetidos como índices.
  3. Cree un índice compuesto: cuando las condiciones de la consulta involucran varias columnas, puede crear un índice compuesto para mejorar la eficiencia de la consulta. El orden de los índices compuestos se determina en función de la frecuencia y selectividad de las condiciones de consulta.
  4. Evite demasiados índices: la creación de demasiados índices aumentará el costo de la escritura de datos y también afectará el rendimiento de las consultas. Cree únicamente los índices necesarios para evitar índices redundantes no válidos.
  5. Evite operaciones de funciones en columnas indexadas: al realizar operaciones de funciones en columnas indexadas, MySQL no puede usar el índice para la optimización, lo que resultará en un escaneo completo de la tabla. Debe intentar evitar el uso de operaciones funcionales en columnas indexadas.
  6. Evite el uso de SELECT *: seleccione solo las columnas requeridas, evite la lectura y transmisión de datos innecesarias y mejore la eficiencia de las consultas.
  7. Analice y optimice periódicamente el índice: según el uso de la base de datos, analice y optimice periódicamente el índice para garantizar el mejor rendimiento del índice.
  8. Utilice un índice de cobertura: intente utilizar un índice de cobertura, es decir, las columnas necesarias para la consulta se incluyen en el índice, lo que evita el acceso a las filas de datos y mejora la eficiencia de la consulta.
  9. Evite actualizaciones y eliminaciones frecuentes de columnas de índice: las actualizaciones y eliminaciones frecuentes de columnas de índice provocarán inestabilidad en el índice y reducirán el rendimiento de las consultas. En resumen, la optimización del índice MySQL es un trabajo integral que debe ajustarse y optimizarse de acuerdo con las necesidades comerciales específicas y el uso de la base de datos. Al crear y utilizar índices correctamente, puede mejorar el rendimiento de las consultas de su base de datos MySQL.
13. ¿Cuáles son las diferencias básicas entre MyISAM e InnoDB? ¿Cómo se implementa la estructura del índice?
A. El tipo MyISAM no admite transacciones ni bloqueos de tablas, y es propenso a la fragmentación. Debe optimizarse con frecuencia y tiene velocidades de lectura y escritura rápidas. Es adecuado para aplicaciones con consultas frecuentes; B. El tipo InnoDB admite transacciones 
, bloqueos de fila, tiene capacidades de recuperación de fallas y tiene capacidades de lectura y escritura. Es más lento que MyISAM y es adecuado para aplicaciones con muchas operaciones de inserción y actualización. Ocupa mucho espacio y no admite la indexación de texto completo. 
Crear un índice: tabla de alerta nombre de tabla agregar índice nombre de índice (`nombre de campo`)
14. MySQL utiliza la estructura de índice de árbol B+
  1. Equilibrio: el árbol B+ mantiene la misma profundidad de todos los nodos hoja, manteniendo la complejidad temporal de la operación de consulta en el nivel O (logN).
  2. Rutas múltiples: cada nodo del árbol B+ puede almacenar múltiples valores de clave de índice y los punteros de datos correspondientes, lo que permite que cada nodo almacene más datos, lo que reduce la cantidad de E/S del disco y mejora la eficiencia de las consultas.
  3. Secuencialidad: los nodos hoja del árbol B+ se ordenan según el tamaño de los valores clave del índice, lo que hace que las operaciones de clasificación y consulta de rango sean más eficientes.
  4. Dividir y fusionar: cuando hay demasiados pares clave-valor en un nodo, el árbol B+ realizará la división de nodos y asignará algunos pares clave-valor a nuevos nodos; cuando hay muy pocos pares clave-valor en el nodo, el B+ El árbol realizará la fusión de nodos Operación que fusiona nodos adyacentes en un solo nodo para mantener el equilibrio del árbol.
  5. Lista vinculada de nodos hoja: los nodos hoja del árbol B + forman una lista vinculada ordenada a través de punteros, lo que facilita la consulta de rango y el recorrido secuencial. Los índices ordinarios, índices únicos, índices de clave primaria, índices compuestos, etc. en MySQL se implementan en base a árboles B+. La ventaja del árbol B+ es que es adecuado para consultas de rango, operaciones de clasificación y operaciones eficientes de inserción y eliminación, y puede admitir índices de varias columnas y acceso a datos altamente concurrente. Al diseñar y utilizar correctamente los índices de árbol B+, se puede mejorar el rendimiento de las consultas y la eficiencia del acceso a los datos de la base de datos MySQL.
2. Mecanismo de bloqueo
1. ¿Qué es una cerradura?
  • Un bloqueo es un mecanismo utilizado para controlar el acceso a recursos compartidos. El uso de bloqueos en una base de datos garantiza la coherencia e integridad de las transacciones simultáneas.
 2. ¿Qué tipos de bloqueos existen en MySQL?
  • Hay muchos tipos de bloqueos en MySQL, incluidos bloqueos a nivel de fila, bloqueos a nivel de tabla y bloqueos a nivel de página.
3. ¿Qué es el bloqueo a nivel de fila? ¿Cómo implementar el bloqueo a nivel de fila en MySQL?
  • El bloqueo a nivel de fila se refiere al bloqueo de una sola fila de datos en la base de datos para evitar que otras transacciones modifiquen la fila de datos. En MySQL, el bloqueo a nivel de fila se puede lograr usando la instrucción SELECT... FOR UPDATE.
4. ¿Qué es el bloqueo a nivel de tabla? ¿Cómo implementar el bloqueo a nivel de tabla en MySQL?
  • El bloqueo a nivel de tabla se refiere a bloquear toda la tabla para evitar que otras transacciones modifiquen la tabla. En MySQL, puede utilizar la instrucción LOCK TABLES para implementar bloqueos a nivel de tabla.
 5. ¿Qué es el bloqueo a nivel de página? ¿Cómo implementar el bloqueo a nivel de página en MySQL?
  • El bloqueo a nivel de página se refiere a bloquear una página de datos en la base de datos para evitar que otras transacciones modifiquen los datos de la página. En MySQL, puede utilizar el motor de almacenamiento InnoDB para implementar bloqueos a nivel de página.
6. ¿Qué son los candados compartidos y los candados exclusivos?
  • El bloqueo compartido permite que otras transacciones lean los datos bloqueados, pero no permite que otras transacciones modifiquen los datos. Un bloqueo exclusivo no permite que otras transacciones lean los datos ni permite que otras transacciones modifiquen los datos.
7. ¿Qué es un punto muerto? ¿Cómo evitar un punto muerto?
  • Un punto muerto se produce cuando dos o más transacciones esperan entre sí para liberar sus bloqueos, lo que impide un mayor procesamiento. Para evitar un punto muerto, puede utilizar el mecanismo de tiempo de espera de las transacciones, establecer un nivel de aislamiento de transacciones razonable y reducir la simultaneidad de las transacciones.
8. ¿Qué son el bloqueo optimista y el bloqueo pesimista?
  • El bloqueo optimista es un mecanismo de control de concurrencia optimista que supone que rara vez ocurren conflictos de concurrencia, por lo que no bloquea activamente, pero verifica si otras transacciones han modificado los datos al enviarlos. El bloqueo pesimista es un mecanismo de control de concurrencia pesimista que supone que los conflictos de concurrencia ocurren con frecuencia, por lo que se bloquea activamente al leer datos para evitar que otras transacciones modifiquen los datos.
9. ¿Qué es la detección y recuperación de interbloqueos?
  • La detección de interbloqueo significa que el sistema detecta la existencia de un interbloqueo y toma las medidas correspondientes para resolver el problema del interbloqueo.
  • La recuperación de un punto muerto se refiere al proceso mediante el cual un sistema levanta un punto muerto, lo que generalmente implica seleccionar una transacción para revertirla o finalizarla. Las anteriores son algunas preguntas comunes de las entrevistas relacionadas con los bloqueos de MySQL. Al responder estas preguntas, puede responderlas basándose en su propia experiencia y comprensión reales.
10. ¿Qué es el nivel de aislamiento de transacciones? ¿Qué niveles de aislamiento de transacciones existen en MySQL?
  • El nivel de aislamiento de transacciones se refiere al grado en que múltiples transacciones simultáneas están aisladas entre sí. Hay cuatro niveles de aislamiento de transacciones en MySQL: LECTURA NO COMPROMETIDA, LECTURA COMPROMETIDA, LECTURA REPETIBLE y SERIALIZABLE.
11. ¿Qué es el bloqueo de espacios? ¿Cómo utilizar bloqueos de espacios en MySQL?
  • El bloqueo de brecha se refiere a bloquear la brecha entre rangos de datos para evitar que otras transacciones inserten nuevos datos en la brecha. En MySQL, los bloqueos de espacios se pueden usar usando las declaraciones SELECT... LOCK IN SHARE MODE o SELECT... FOR UPDATE.
12. ¿Qué es el tiempo de espera para un punto muerto?
  • El tiempo de espera del punto muerto significa que cuando se produce un punto muerto, el sistema finaliza automáticamente una de las transacciones después de esperar un cierto período de tiempo para aliviar el punto muerto. El tiempo de espera de interbloqueo en MySQL se puede configurar mediante el parámetro innodb_lock_wait_timeout.
13. ¿Qué es un bloqueo giratorio? ¿Cuándo utilizar el bloqueo de giro?
  • El bloqueo de giro es un mecanismo de espera ocupada del bloqueo. Al adquirir el bloqueo, el hilo verificará el estado del bloqueo en un bucle hasta que lo adquiera. Los bloqueos de giro funcionan mejor en CPU de múltiples núcleos y son adecuados para situaciones en las que ocurren conflictos de bloqueo durante un período breve y los subprocesos no se bloquean durante mucho tiempo.
14. ¿Qué es la granularidad de bloqueo? ¿Cómo elegir la granularidad de bloqueo adecuada?
  • La granularidad de bloqueo se refiere al tamaño del rango de datos bloqueados, incluidos bloqueos a nivel de fila, bloqueos a nivel de tabla y bloqueos a nivel de página. La elección de la granularidad de bloqueo adecuada debe considerarse de manera integral en función de factores como el acceso simultáneo, el modo de acceso a datos y los requisitos de rendimiento.
15. ¿Qué son la actualización y degradación de bloqueo?
  • La actualización de bloqueo se refiere a actualizar un bloqueo de bajo nivel a un bloqueo de alto nivel, y la degradación de bloqueo se refiere a degradar un bloqueo de alto nivel a un bloqueo de bajo nivel. En MySQL, la promoción de bloqueos es automática, mientras que la degradación de bloqueos debe realizarse manualmente.
16. ¿Qué es un gráfico de punto muerto?

Un diagrama de punto muerto es una representación gráfica que describe las relaciones entre transacciones en una base de datos que están en punto muerto. Al analizar el gráfico de interbloqueo, puede comprender la relación de espera entre cada transacción para resolver el problema del interbloqueo.

17. ¿Los bloqueos pesimistas y optimistas de msyql se clasifican como bloqueos compartidos o bloqueos exclusivos?
  • El punto muerto se refiere a una situación en la que dos o más transacciones esperan los recursos de la otra, lo que resulta en la imposibilidad de que todas las transacciones continúen con la ejecución. En pocas palabras, dos o más transacciones están esperando que la otra libere recursos, cayendo así en un punto muerto incontinuable.
  • Lectura sucia significa que una transacción lee datos no confirmados de otra transacción. Cuando una transacción está leyendo datos, otra transacción ha modificado los datos pero aún no los ha confirmado. En este momento, los datos leídos por la primera transacción son inconsistentes o no válidos.
  • Lectura fantasma significa que cuando una transacción lee datos, otra transacción inserta o elimina los mismos datos, lo que hace que la primera transacción lea filas de datos inconsistentes. La diferencia entre la lectura fantasma y la lectura sucia es que la lectura sucia lee datos modificados no confirmados, mientras que la lectura fantasma lee datos nuevos o eliminados que han sido enviados por otras transacciones.
  • Lectura no repetible significa que cuando una transacción lee datos, otra transacción modifica y confirma los mismos datos, lo que genera resultados inconsistentes cuando la primera transacción lee los mismos datos varias veces. La diferencia entre la lectura no repetible y la lectura fantasma es que la lectura no repetible lee datos modificados que han sido enviados por otras transacciones, mientras que la lectura fantasma lee datos nuevos o eliminados que han sido enviados por otras transacciones. Estos problemas ocurren principalmente en entornos de procesamiento de transacciones concurrentes y son causados ​​por múltiples transacciones que leen y escriben en la base de datos al mismo tiempo. Para resolver estos problemas, el sistema de base de datos proporciona diferentes niveles de aislamiento (como lectura no confirmada, lectura confirmada, lectura repetible y serialización). Los desarrolladores pueden elegir el nivel de aislamiento apropiado según la situación específica para evitar o reducir estos problemas.

3. Conceptos básicos de MySQL

1. Explique qué es PDO en PHP.
PDO (PHP Data Objects) es una extensión PHP que se utiliza para conectar y operar una variedad de bases de datos, incluidas MySQL, PostgreSQL, Oracle, etc. PDO proporciona una interfaz unificada y un conjunto de métodos para realizar operaciones de bases de datos 
y admite funciones avanzadas como declaraciones preparadas y procesamiento de transacciones.
 2. La diferencia entre mongodb y mysql
Mongodb es una base de datos no relacional, MySQL es una base de datos relacional. 
MySQL es relativamente maduro y admite SQL relacional más complejo. La desventaja es que se ralentiza cuando los datos son grandes. 
Los datos calientes de MongoDB existen directamente en la memoria física. Big data puede También se puede consultar rápidamente y no se admiten transacciones.
3. Proceso de ejecución de SQL
declaración sql-)conector-)caché de consultas-)intérprete-)ejecutor

4. ¿Qué son las transacciones en la base de datos?

En una base de datos, una transacción es una unidad lógica de un conjunto de operaciones de base de datos (como inserciones, actualizaciones, eliminaciones, etc.) que se ejecutan correctamente o se revierten y deshacen. Las transacciones tienen las siguientes cuatro características, a menudo denominadas propiedades ACID:

  1. Atomicidad: una transacción es una unidad de trabajo indivisible que se ejecuta correctamente o falla y se revierte. Si falla alguna operación en la transacción, toda la transacción se revertirá al estado original sin cambios parciales.
  2. Coherencia: la base de datos debe mantener un estado coherente antes y después de la ejecución de la transacción. Esto significa que las operaciones dentro de una transacción deben satisfacer reglas y restricciones predefinidas para garantizar la integridad y validez de los datos.
  3. Aislamiento: la ejecución de transacciones debe estar aislada entre sí y las transacciones no deben interferir entre sí. Las transacciones múltiples que se ejecutan simultáneamente deben mantenerse aisladas entre sí para evitar inconsistencias y conflictos de datos.
  4. Durabilidad: una vez que se confirma una transacción, sus cambios en la base de datos deben ser permanentes y persistir incluso después de una falla o falla del sistema. Al utilizar transacciones, puede garantizar la integridad de los datos y la coherencia de su base de datos. Las aplicaciones comunes de transacciones en aplicaciones incluyen transferencias bancarias, procesamiento de pedidos, gestión de inventario y otros escenarios en los que es necesario garantizar la precisión e integridad de los datos.
  5. La diferencia entre char y varchar

char longitud fija varchar espacio de longitud variable char ocupa un espacio de almacenamiento fijo varchar espacio real char tiene una alta eficiencia de consulta

6. ¿Cuál es la diferencia entre una base de datos relacional y una base de datos no relacional?

La diferencia entre bases de datos relacionales y bases de datos no relacionales se puede resumir brevemente de la siguiente manera:

  • Método de almacenamiento de datos: las bases de datos relacionales almacenan datos en forma de tablas, mientras que las bases de datos no relacionales almacenan datos en forma de pares clave-valor, documentos, etc.
  • Modelo de datos: las bases de datos relacionales utilizan modelos de datos estructurados y utilizan SQL para operaciones y consultas; las bases de datos no relacionales utilizan modelos de datos no estructurados o semiestructurados y utilizan diferentes lenguajes de consulta o API.
  • Escalabilidad: las bases de datos relacionales generalmente se expanden verticalmente, es decir, agregan recursos de hardware para mejorar el rendimiento; las bases de datos no relacionales pueden expandirse horizontalmente, aumentando la capacidad de almacenamiento y el rendimiento al agregar nodos.
  • Coherencia de los datos: las bases de datos relacionales siguen características ACID para garantizar la integridad y coherencia de los datos; las bases de datos no relacionales buscan alta disponibilidad y rendimiento distribuido, y pueden sacrificar cierta coherencia de los datos en algunos casos.
  • Escenarios aplicables: las bases de datos relacionales son adecuadas para aplicaciones que necesitan garantizar la coherencia de los datos, el procesamiento de transacciones y consultas complejas; las bases de datos no relacionales son adecuadas para aplicaciones que procesan datos a gran escala y un alto acceso concurrente.
 7. Describa brevemente las diferencias entre la unión izquierda, la unión derecha y la unión interna de MySQL.
  1. LEFT JOIN: una combinación izquierda devuelve todos los registros de la tabla izquierda, así como los registros de la tabla derecha que coinciden con la tabla izquierda. Si no hay ningún registro coincidente en la tabla de la derecha, se devuelve un valor NULL. La palabra clave de unión izquierda es LEFT JOINo LEFT OUTER JOIN.
  2. RIGHT JOIN: una combinación derecha devuelve todos los registros de la tabla derecha, así como los registros de la tabla izquierda que coinciden con la tabla derecha. Si no hay ningún registro coincidente en la tabla de la izquierda, se devuelve un valor NULL. La palabra clave de unión correcta es RIGHT JOINo RIGHT OUTER JOIN.
  3. INNER JOIN: La combinación interna solo devuelve registros coincidentes en las tablas de la izquierda y de la derecha. Filtra filas coincidentes de ambas tablas según las condiciones de unión. La palabra clave de unión interna es INNER JOIN. Resumir:
  • LEFT JOINDevuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
  • RIGHT JOINDevuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
  • INNER JOINSólo se devuelven los registros coincidentes de las tablas izquierda y derecha. Cabe señalar que la exactitud de las condiciones de conexión tiene un impacto importante en los resultados de la conexión. Además, si se usa la cláusula WHERE en la operación de unión, la operación de unión puede convertirse en una unión interna, por lo que debe usarse con precaución.
8. ¿Cuál es la diferencia entre PDO y la extensión mysqli en PHP? ¿Qué extensión se debe utilizar para operar la base de datos?

PDO y mysqli son extensiones en PHP que se utilizan para operar bases de datos. La diferencia es que PDO es una capa de abstracción de acceso a bases de datos liviana que admite una variedad de bases de datos y tiene mejor portabilidad; mysqli es una extensión de PHP para la base de datos MySQL y solo admite la base de datos MySQL. La extensión a utilizar debe elegirse en función de las necesidades específicas y las condiciones del proyecto. Si necesita admitir múltiples bases de datos o tiene requisitos de portabilidad, puede optar por utilizar PDO; si solo necesita operar la base de datos MySQL, puede optar por utilizar mysqli. porque proporciona más funciones y optimizaciones específicas de MySQL.

9. Describa brevemente las diferencias de ejecución entre recuento (1), recuento (*) y recuento (nombre de columna).
  1. COUNT(1): Cuando se usa COUNT(1), en realidad cuenta el número de filas que cumplen la condición. En cada fila, 1representa una constante, que no requiere cálculo ni recuperación adicionales, por lo que la eficiencia de ejecución es relativamente alta. Esta forma de escritura se utiliza generalmente para contar filas simples.
  2. COUNT(*): Cuando se usa COUNT(*), en realidad cuenta el número de filas que cumplen la condición. *Indica que todas las columnas están seleccionadas, por lo que al calcular el número de filas, es necesario recuperar los valores de todas las columnas, lo que puede provocar una sobrecarga adicional. En algunos casos, el uso COUNT(*)puede provocar una degradación del rendimiento si la tabla tiene una gran cantidad de columnas o una gran cantidad de filas.
  3. COUNT(列名): Cuando se usa COUNT(列名), en realidad cuenta el número de líneas no vacías que cumplen la condición. Esta forma de escribir cuenta la columna especificada y solo cuenta los valores no nulos en esa columna. Si existen valores NULL en la columna especificada, estos valores NULL no se contarán. Resumir:
  • COUNT(1)Es la forma de escritura más utilizada: devuelve una constante en cada fila y no requiere cálculos ni recuperaciones adicionales, por lo que la eficiencia de ejecución es relativamente alta.
  • COUNT(*)Se recuperarán todos los valores de las columnas y se calculará el número de filas que cumplen las condiciones. En algunos casos se puede incurrir en gastos generales adicionales, especialmente cuando la tabla tiene una gran cantidad de columnas o una gran cantidad de filas.
  • COUNT(列名)Cuenta la columna especificada y solo cuenta los valores no nulos para esa columna. Si existen valores NULL en la columna especificada, estos valores NULL no se contarán.
10. Dónde, jion, límite, agrupar por, tener, etc., orden de ejecución
  1. DE: obtiene datos de la tabla especificada. Si hay varias tablas, se realizará la operación de conexión correspondiente (JOIN).
  2. DÓNDE: Filtre las filas que cumplan las condiciones especificadas.
  3. GRUPO POR: Agrupa los resultados por columnas especificadas.
  4. TENER: Filtrar los resultados agrupados.
  5. SELECCIONAR: Seleccione las columnas a consultar.
  6. ORDENAR POR: Ordena los resultados.
  7. LÍMITE: limita el número de filas de resultados devueltas.

Cuarto, optimización de MySQL 

1. MySQL tiene más de 100 millones de datos en una sola tabla, ¿cómo optimizar la velocidad de consulta?
  1. Optimización de índices: la creación, el uso y el mantenimiento adecuados de índices pueden mejorar en gran medida la velocidad de las consultas. Para los campos que se utilizan con frecuencia como criterios de consulta, considere la posibilidad de crear índices. Pero demasiados índices también afectarán la velocidad de inserción y actualización de datos, por lo que existe una compensación.
  2. Tabla de particiones: al dividir una tabla grande según ciertas condiciones, los datos se pueden almacenar en diferentes ubicaciones físicas para mejorar la eficiencia de las consultas. Según el escenario real, se puede dividir según el tiempo, la región, etc.
  3. División vertical: dividir la tabla en varias tablas pequeñas con columnas similares puede reducir la cantidad de datos en una sola tabla y mejorar la velocidad de la consulta. Sin embargo, es necesario dividirlo de acuerdo con la situación real para evitar una división excesiva que conduzca a una mayor complejidad de la consulta.
  4. División horizontal: divida la tabla de acuerdo con ciertas condiciones y almacene los datos en diferentes tablas, lo que puede reducir la cantidad de datos en una sola tabla y mejorar la velocidad de la consulta. Sin embargo, es necesario considerar la cuestión de la asociación de datos para garantizar que los datos requeridos se puedan obtener correctamente durante la consulta.
  5. Optimización de consultas: optimice las declaraciones de consulta para evitar escaneos completos de tablas y una gran cantidad de operaciones de tablas temporales. La eficiencia de las consultas se puede mejorar utilizando índices apropiados, optimizando la escritura de declaraciones de consulta y evitando consultas repetidas.
  6. Compresión de datos: los datos fríos se pueden comprimir y almacenar para reducir el uso de espacio en disco y mejorar la velocidad de las consultas.
  7. Optimización de hardware: puede considerar el uso de hardware de mayor rendimiento, como discos duros SSD, memoria más grande, etc., para mejorar el rendimiento general de la base de datos. Las anteriores son algunas estrategias de optimización de uso común: los planes de optimización específicos deben seleccionarse y ajustarse de acuerdo con la situación real. Además, a través de herramientas de monitoreo y ajuste, como la declaración EXPLAIN propia de MySQL, el registro de consultas lentas, etc., puede ayudar a descubrir posibles problemas de rendimiento y optimizarlos.
2. Cómo localizar SQL lento
  1. Active el registro de consultas lentas: en el archivo de configuración de MySQL, establezca slow_query_logel parámetro ONy especifique slow_query_log_fileel parámetro para especificar la ruta del archivo de registro de consultas lentas. Reinicie MySQL para que la configuración surta efecto.
  2. Establezca el umbral de consulta lenta: long_query_timeespecifique el umbral de tiempo de consulta lenta configurando el parámetro, en segundos. El valor predeterminado es 10 segundos. Se puede ajustar según la situación real.
  3. Analice registros de consultas lentas: al analizar los archivos de registro de consultas lentas, puede localizar SQL lento. Puede utilizar mysqldumpslowla herramienta, que puede analizar registros de consultas lentas y ordenar declaraciones de consulta por tiempo de ejecución.
    mysqldumpslow -s t /path/to/slow_query_log

  4. Este comando enumerará las declaraciones de consulta en el registro de consultas lentas en orden descendente de tiempo de ejecución.
  5. Utilice EXPLAIN para analizar el plan de consulta: para consultas lentas, puede utilizar EXPLAINla palabra clave para ver el plan de consulta. El comando de ejecución EXPLAINpuede mostrar el plan de ejecución de la declaración de consulta y el uso del optimizador. Al analizar el plan de consulta, puede determinar si la consulta utiliza índices, si se realiza un escaneo completo de la tabla, etc.
  6. EXPLAIN SELECT * FROM table WHERE column = 'value';

  7. Utilice herramientas de supervisión del rendimiento: además de los registros y registros de consultas lentos EXPLAIN, también puede utilizar herramientas de supervisión del rendimiento para localizar SQL lento. Por ejemplo, utilice la herramienta de seguimiento del rendimiento que viene con MySQL Performance Schemao utilice herramientas de terceros como pt-query-digest, Percona Toolkitetc. Mediante los pasos anteriores, puede localizar SQL lento y optimizarlo según la situación para mejorar el rendimiento de la base de datos.
3. Cómo dividir tablas y bases de datos en msyql 
  1. Biblioteca sucursal:
    • Según las necesidades comerciales y las características de los datos, determine la división lógica de las bases de datos que deben dividirse. Se puede dividir según diferentes módulos comerciales o tipos de datos.
    • Cree múltiples instancias de bases de datos, cada instancia corresponde a una subbase de datos.
    • Migre las tablas de la base de datos original de acuerdo con las reglas de partición para garantizar que los datos de cada subbase de datos cumplan con las reglas de partición.
  2. Subtabla:
    • Según las necesidades comerciales y las características de los datos, determine la división lógica de las tablas que deben dividirse. Se puede dividir según hora, región, usuario y otra información.
    • Cree varias tablas, cada tabla correspondiente a una subtabla.
    • Migre los datos de la tabla original de acuerdo con las reglas de partición para garantizar que los datos de cada tabla cumplan con las reglas de partición.
  3. Enrutamiento de datos:
    • Implemente la lógica de enrutamiento de datos en la aplicación y seleccione las subbases de datos y tablas adecuadas para el acceso a los datos según las necesidades comerciales.
    • La función de enrutamiento de datos se puede implementar a través de un grupo de conexiones de base de datos o un marco de acceso a datos.
  4. Optimización del índice:
    • Después de dividir tablas y bases de datos, es necesario reevaluar y optimizar el diseño del índice. Según la frecuencia de las consultas y las necesidades reales, vuelva a crear índices apropiados para mejorar el rendimiento de las consultas. Cabe señalar que las subtablas y subbases de datos deben diseñarse e implementarse en función de las necesidades comerciales específicas y el uso de la base de datos. Al mismo tiempo, las subtablas y subbases de datos también traerán algunos trabajos adicionales de administración y mantenimiento, como sincronización de datos, consultas entre bases de datos, etc. Por lo tanto, antes de implementar la subtabla y la subbase de datos, es necesario evaluar y planificar completamente, y realizar pruebas y verificaciones suficientes para garantizar que la subtabla y la subbase de datos puedan lograr los objetivos esperados.
4. Replicación maestro-esclavo de MySQL 

La replicación maestro-esclavo de MySQL es una tecnología de replicación de bases de datos comúnmente utilizada para lograr la sincronización de datos entre múltiples servidores MySQL. En la replicación maestro-esclavo, un servidor MySQL (llamado maestro) actúa como fuente de datos, mientras que uno o más servidores MySQL (llamados esclavos) replican los datos en el maestro. La replicación maestro-esclavo funciona de la siguiente manera:

  1. El servidor principal escribe los datos actualizados en el registro binario, incluidas operaciones como agregar, eliminar y modificar.
  2. El servidor esclavo se conecta al servidor maestro y obtiene los cambios de datos que ocurrieron en el servidor maestro solicitando eventos de registro en el registro binario.
  3. El servidor esclavo aplica los eventos de registro obtenidos a su propia base de datos para que los datos en el servidor esclavo sean consistentes con los del servidor maestro. Los pasos para configurar y configurar la replicación maestro-esclavo son los siguientes:
  4. En el servidor maestro, asegúrese de que el registro binario esté habilitado. Puede habilitar la log_binfunción de registro binario estableciendo parámetros en el archivo de configuración y estableciendo un identificador único server_id.
  5. CREATE USER 'replication_user'@'slave_ip' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip';

  • Entre ellos, slave_ipse encuentra la dirección IP del servidor esclavo y passwordla contraseña del usuario copiado. En el servidor esclavo, configure server_idlos parámetros y asegúrese de que sean server_iddiferentes a los del servidor maestro. Ejecute el siguiente comando en el servidor esclavo para especificar la dirección IP del servidor maestro, copiar el usuario y la contraseña y otra información:
    CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='log_file', MASTER_LOG_POS=log_position;

    donde master_ipes la dirección IP del servidor maestro, replication_userel passwordnombre de usuario y la contraseña del usuario de replicación creado en el servidor maestro, log_filey log_positionson el nombre de archivo y la ubicación del registro binario del servidor maestro, respectivamente. Puede SHOW MASTER STATUS;ver el nombre y la ubicación del archivo de registro binario actual en el servidor maestro mediante el comando.

  • START SLAVE;

  • Esto hará que el servidor esclavo se conecte al servidor maestro y comience a replicar datos.
  • Puede utilizar SHOW SLAVE STATUS;el comando para verificar el estado de replicación del servidor esclavo, incluido si la replicación es normal, el retraso y otra información. Mediante los pasos anteriores, puede configurar la replicación maestro-esclavo de MySQL y lograr la sincronización de datos. La replicación maestro-esclavo puede proporcionar respaldo de datos, separación de lectura y escritura, equilibrio de carga y otras funciones para mejorar la disponibilidad y el rendimiento de la base de datos.
5. ¿Qué hacer si la CPU de la base de datos MySQL aumenta al 100%?
  1. Verifique y optimice las declaraciones de consulta: el uso elevado de CPU puede deberse a una ejecución ineficiente de ciertas declaraciones de consulta. Al utilizar la declaración EXPLAIN para analizar el plan de ejecución de la declaración de consulta, descubra consultas lentas o declaraciones de consulta que utilicen muchos recursos y optimícelas. Puede considerar agregar índices apropiados, reescribir declaraciones de consulta, evitar escaneos completos de tablas, etc. para mejorar el rendimiento de las consultas.
  2. Ajuste la configuración del grupo de conexiones de la base de datos: si la cantidad de conexiones simultáneas es demasiado alta, los recursos de la CPU estarán ocupados por una gran cantidad de solicitudes de conexión. Puede ajustar los parámetros del grupo de conexiones de la base de datos para limitar la cantidad de conexiones simultáneas y evitar solicitudes de conexión excesivas que provoquen un pico de CPU. Por ejemplo, puede reducir el número máximo de conexiones, ajustar el tiempo de espera de la conexión, etc.
  3. Verifique y optimice los parámetros de configuración de la base de datos: los parámetros de configuración de MySQL tendrán un impacto importante en el rendimiento de la base de datos. Puede verificar y ajustar algunos parámetros de configuración importantes, como innodb_buffer_pool_size, query_cache_size, etc., para adaptarse a la carga actual de la base de datos.
  4. Analice y optimice la estructura de la tabla de la base de datos: si la estructura de la tabla de la base de datos no está diseñada correctamente, puede provocar un uso elevado de la CPU. Al analizar la estructura de la tabla y realizar las optimizaciones necesarias, como dividir tablas grandes, fusionar tablas pequeñas, estandarizar tipos y longitudes de campos, etc., se puede reducir la carga en la base de datos.
  5. Compruebe si hay una gran cantidad de operaciones de actualización simultáneas: una gran cantidad de operaciones de actualización simultáneas puede provocar un aumento de la CPU. Puede reducir el impacto de las actualizaciones simultáneas en la CPU ajustando la frecuencia de las operaciones de actualización, fusionando operaciones de actualización, etc.
  6. Considere actualizar el hardware y optimizar los recursos del servidor: si la CPU de la base de datos continúa aumentando y ha probado los métodos de optimización anteriores, puede considerar actualizar el hardware del servidor y aumentar la cantidad de núcleos de CPU y la capacidad de memoria para proporcionar un mejor rendimiento. En resumen, cuando la CPU de la base de datos MySQL se dispara al 100%, el problema se puede resolver optimizando las declaraciones de consulta, ajustando la configuración del grupo de conexiones de la base de datos, optimizando los parámetros de configuración, optimizando la estructura de la tabla de la base de datos y reduciendo las operaciones de actualización simultáneas. Si el problema persiste, considere actualizar el hardware y optimizar los recursos del servidor.
6. ¿Cómo realizar consultas por página después de dividir decenas de miles de millones de datos en tablas?
  1. Determine las reglas de división de tablas: seleccione las reglas de división de tablas adecuadas según las necesidades reales y las características de los datos, como dividir tablas según el tiempo, la región, el usuario y otras condiciones.
  2. Calcule el desplazamiento de paginación: según la cantidad de datos que se muestran en cada página y el número de página actual, calcule la cantidad de datos que deben omitirse y obtenga el desplazamiento de paginación.
  3. Localice la tabla de destino: determine la tabla de destino que se consultará en función de los campos clave en las condiciones de la consulta.
  4. Consultar la tabla de destino: consulta datos de la tabla de destino de acuerdo con las condiciones de la consulta y el desplazamiento de paginación. Puede utilizar índices y reglas de fragmentación para acelerar las consultas.
  5. Devolver el conjunto de resultados: devuelve los datos consultados a la aplicación para su visualización o procesamiento posterior. Cabe señalar que al realizar una consulta de paginación después de dividir una tabla, puede encontrar situaciones entre tablas, es decir, una consulta de paginación necesita consultar varias tablas divididas al mismo tiempo. En este momento, se pueden utilizar tecnologías como consultas conjuntas y consultas distribuidas para el procesamiento. Además, para mejorar la eficiencia de las consultas, parte de la información estadística, como la cantidad total de datos y los valores límite de cada tabla, se puede precalcular y almacenar durante el proceso de fragmentación de la tabla para facilitar la optimización durante las consultas de paginación. En resumen, las consultas de paginación después de dividir decenas de miles de millones de datos en tablas deben ubicar la tabla de destino de acuerdo con las reglas de división de tablas y las condiciones de consulta, y calcular el desplazamiento de paginación de la consulta. Al mismo tiempo, se pueden utilizar tecnologías como la indexación y el cálculo previo para mejorar la eficiencia de las consultas.
7. ¿Cómo optimizar el rendimiento de las consultas MySQL?
  • Utilice índices apropiados: cree índices apropiados basados ​​en las condiciones de la consulta y las características de la tabla para acelerar las consultas.
  • Evite escaneos completos de tablas: evite el uso de condiciones de consulta sin índices para reducir la cantidad de datos consultados.
  • Optimice las declaraciones de consulta: evite el uso de declaraciones de consulta complejas, use declaraciones de consulta apropiadas, evite usar SELECT * y seleccione solo las columnas que necesita.
  • Optimización de consultas de paginación: utilice la instrucción LIMIT para realizar consultas de paginación para evitar consultar grandes cantidades de datos.
  • Evite el uso de subconsultas y tablas temporales: intente evitar el uso de subconsultas y tablas temporales. Puede optimizarlas reescribiendo declaraciones de consulta o usando JOIN.
  • Evite la normalización excesiva: datos redundantes adecuadamente y reduzca la cantidad de consultas relacionadas en la tabla.
  • Optimice la estructura de la tabla: diseñe la estructura de la tabla adecuadamente para evitar el uso de demasiados campos y tipos de datos innecesarios.
  • Optimización de los parámetros de configuración: ajuste los parámetros de configuración de MySQL de acuerdo con la configuración del hardware del servidor y la carga de la base de datos para mejorar el rendimiento.
8. ¿Cómo optimizar la estructura de la tabla de MySQL?
  • Utilice tipos de datos adecuados: elija tipos de datos adecuados para almacenar datos y evite utilizar tipos de datos que sean demasiado largos o demasiado grandes.
  • Regularización y redundancia: en función de las necesidades reales y la frecuencia de las consultas, se realiza la regularización y la redundancia para reducir la cantidad de consultas asociadas.
  • Uso razonable de índices: cree índices apropiados basados ​​en las condiciones de la consulta y las características de la tabla para mejorar la velocidad de la consulta.
  • Tabla particionada: para tablas grandes, la partición se puede realizar según el rango de un determinado campo para mejorar la eficiencia de las consultas y el mantenimiento.
  • Segmentación vertical y segmentación horizontal: para tablas muy grandes, puede dividir la tabla mediante segmentación vertical y segmentación horizontal para reducir la cantidad de datos en una sola tabla.
  • Tablas de caché y tablas de resumen: para tablas con alta frecuencia de consulta pero baja frecuencia de actualización, los resultados de la consulta se pueden almacenar en caché en la tabla para mejorar la velocidad de consulta.
9. ¿Cómo optimizar los parámetros de configuración de MySQL?
  • De acuerdo con la configuración del hardware del servidor y la carga de la base de datos, ajuste los parámetros de configuración de MySQL para mejorar el rendimiento.
  • Ajuste el tamaño del búfer: según la carga de trabajo y el tamaño de la memoria de la base de datos, ajuste parámetros como innodb_buffer_pool_size, key_buffer_size, etc. para mejorar el efecto de almacenamiento en caché.
  • Ajuste la cantidad de conexiones simultáneas: según la carga del servidor, ajuste el parámetro max_connections para controlar la cantidad de conexiones simultáneas.
  • Ajuste el tamaño de la caché de consultas: según las características y la frecuencia de la consulta, ajuste el parámetro query_cache_size para mejorar el efecto de la caché de consultas.
  • Ajuste los parámetros de registro: ajuste binlog_format, sync_binlog y otros parámetros según sea necesario para mejorar la velocidad de escritura y sincronización de registros.
  • Habilite registros de consultas lentas: habilite registros de consultas lentas, ubique declaraciones de consultas lentas según el umbral de tiempo de consulta y optimícelas.
  • Optimización y mantenimiento periódicos: analice y optimice periódicamente tablas e índices, y realice copias de seguridad y optimización de la base de datos para mantener el rendimiento y la estabilidad de la base de datos.

Cinco, seguridad mysql

1. ¿Qué es la inyección SQL y cómo prevenirla? 
La inyección SQL (Inyección SQL) es un método común de ataque de vulnerabilidad de seguridad. El atacante inyecta código SQL malicioso en los datos ingresados ​​por el usuario, de modo que la aplicación ejecuta el código malicioso construido por el atacante al ejecutar la consulta SQL, lo que conduce a un acceso ilegal. a la base de datos, fuga de datos o manipulación. 
Para prevenir ataques de inyección SQL, puede tomar las siguientes medidas: 


Usar consultas parametrizadas o declaraciones preparadas: este es el método más común para prevenir la inyección SQL al pasar datos ingresados ​​por el usuario como parámetros a la consulta SQL en lugar de unirlos directamente en la consulta SQL. declaración, que puede prevenir eficazmente ataques de inyección. 

Verificación y filtrado de entrada: verifique y filtre los datos ingresados ​​por el usuario, acepte solo entradas legales y escape caracteres especiales. La validación de entrada se puede realizar mediante expresiones regulares, listas blancas, etc. 

Utilice un marco ORM: el uso de un marco ORM puede abstraer las operaciones de la base de datos y reducir la posibilidad de empalmar manualmente declaraciones SQL, reduciendo así la posibilidad de inyección. 

Principio de privilegio mínimo: los usuarios de la base de datos deben tener los privilegios mínimos y solo pueden realizar las operaciones necesarias para evitar que los atacantes exploten la base de datos. 

Registro y monitoreo: registre y monitoree las operaciones de la base de datos de manera oportuna y detecte operaciones anormales de manera oportuna para que se puedan tomar medidas oportunas. 

Cortafuegos y sistemas de detección de intrusiones: utilice dispositivos de seguridad como cortafuegos y sistemas de detección de intrusiones para monitorear y prevenir intrusiones. 
En resumen, los ataques de inyección SQL se pueden prevenir eficazmente tomando diversas medidas, como consultas parametrizadas, validación y filtrado de entradas, uso de marcos ORM, el principio de privilegio mínimo, registro y monitoreo, y dispositivos de seguridad.
 2. ¿Cómo proteger la seguridad de la base de datos MySQL?
  • Utilice contraseñas seguras: establezca contraseñas complejas, largas y aleatorias, y cámbielas periódicamente.
  • Restringir los derechos de acceso: autorice solo a los usuarios necesarios y limite su alcance de acceso.
  • Haga una copia de seguridad de sus datos con regularidad: haga una copia de seguridad de su base de datos con regularidad para evitar la pérdida de datos y almacene los datos de la copia de seguridad en un lugar seguro.
  • Actualizaciones y parches: mantenga MySQL y los sistemas operativos actualizados con parches y actualizaciones de seguridad para protegerse contra vulnerabilidades de seguridad conocidas.
  • Utilice un firewall: utilice un firewall para restringir el acceso al puerto MySQL y permitir que solo se conecten direcciones IP autorizadas.
  • Habilitar SSL/TLS: utilice SSL/TLS para cifrar la conexión y proteger la seguridad de la transmisión de datos.
  • Monitoreo y auditoría: monitoree la actividad de la base de datos y realice auditorías para detectar comportamientos anormales.
  • Deshabilite funciones innecesarias: deshabilite funciones y complementos de MySQL innecesarios para reducir posibles riesgos de seguridad.
3. ¿Cómo restringir el acceso a la base de datos MySQL?
  • Cree contraseñas seguras: cree una contraseña segura para cada usuario y cámbiela periódicamente.
  • Limite los permisos de usuario: otorgue solo los permisos mínimos necesarios a los usuarios para evitar otorgar demasiados permisos.
  • Utilice un firewall: utilice un firewall para restringir el acceso al puerto MySQL y permitir que solo se conecten direcciones IP autorizadas.
  • Deshabilitar el acceso remoto: si no se requiere acceso remoto a MySQL, el acceso remoto se puede deshabilitar en el archivo de configuración.
  • Restringir el acceso a la red: a nivel de red, restrinja el acceso al servidor MySQL a través de firewalls o dispositivos de red.
  • Utilice una conexión cifrada SSL/TLS: proteja la seguridad de los datos durante la transmisión habilitando la conexión cifrada SSL/TLS.
  • Utilice la lista blanca de IP: solo permita que los usuarios de direcciones IP específicas accedan al servidor MySQL.
4. ¿Cómo proteger datos confidenciales en la base de datos MySQL?
  • Cifrado de datos: cifre y almacene datos confidenciales para garantizar que no puedan descifrarse incluso si los datos son robados.
  • Desensibilización de datos: desensibilice los datos confidenciales para proteger la privacidad del usuario.
  • Control de acceso estricto: autorice solo a los usuarios necesarios a acceder a datos confidenciales y limite sus permisos de acceso.
  • Auditoría periódica: Audite periódicamente los registros de acceso a datos confidenciales para detectar comportamientos anormales de manera oportuna.
  • Habilitar el registro de la base de datos: habilite la función de registro de MySQL para registrar registros de acceso y modificación de datos confidenciales.
  • Fortalecer la seguridad de la base de datos: proteja la seguridad de los servidores de bases de datos contra piratas informáticos para evitar la fuga de datos confidenciales.
  • Haga una copia de seguridad de los datos con regularidad: haga una copia de seguridad de los datos confidenciales con regularidad y almacene los datos de respaldo en un lugar seguro para evitar la pérdida o corrupción de datos. Las anteriores son algunas preguntas y respuestas de entrevistas relacionadas sobre la seguridad de MySQL. Espero que le sean útiles.

Supongo que te gusta

Origin blog.csdn.net/weixin_39934453/article/details/133307559
Recomendado
Clasificación