¿Realmente usa el comando de ayuda de MySQL? Una comprensión completa de la biblioteca del sistema mysql

¿Es importante la información de ayuda de MySQL? ¡no tan importante! ¿Es eso útil? ¡Tener! Es como cuando te duchas en casa, de repente alguien sigue presionando el timbre de tu casa, lo que puede reprimir tu enfermedad cardíaca, jeje.

Creo que, compañeros de DBA, si de repente olvidan cierto SQL o cómo deletrear un determinado comando de administración durante el mantenimiento diario de la base de datos, lo primero que se les ocurre es usar la declaración "help xxx" para ver el MySQL incorporado. información de ayuda.

Pero debe poder encontrar tal escenario más o menos: no puede recordar la ortografía específica de una oración, solo puede recordar algunas letras vagamente, o sabe claramente qué información de ayuda desea verificar, pero no sabe Qué palabras clave se utilizan para consultar la información de ayuda (por ejemplo: quiero ver la declaración SQL que analiza el registro de retransmisión). ¿Qué hacer en este momento? ¡Que no cunda el pánico, este artículo te dirá la respuesta!

Si desea saber qué hacer, debe comprender completamente el sistema de ayuda proporcionado por MySQL. A continuación, le mostraremos la verdadera cara de Lushan.

01

¿De dónde proviene la información de la declaración de ayuda?

MySQL Server proporciona 4 tablas para almacenar información de ayuda en el lado del servidor (información de ayuda visualizada usando la sintaxis de ayuda) Estas tablas se encuentran en la biblioteca de diccionarios del sistema mysql. La declaración de ayuda es obtener datos de estas tablas y regresar al cliente, de la siguiente manera:

  • help_category: información sobre la categoría de temas de ayuda

  • help_keyword: información de palabras clave relacionada con el tema de ayuda

  • help_relation: ayuda al mapeo entre la información de palabras clave y la información del tema

  • help_topic: el contenido detallado del tema de ayuda

02

Cuándo se generó la información de la declaración de ayuda

Estas tablas se crean cargando el archivo share / fill_help_tables.sql cuando se inicializa la base de datos. Si MySQL se instala usando una distribución de código binario o fuente en Unix, el archivo se importará directamente para inicializar el contenido de la tabla de ayuda cuando se inicialice el directorio de datos. Para distribuciones RPM en Linux o distribuciones binarias en Windows, la inicialización del contenido de la tabla de ayuda se realiza como parte del proceso de instalación de MySQL.

  • Si usa una distribución binaria para actualizar MySQL, las tablas de ayuda no se actualizarán automáticamente, pero puede actualizar manualmente (cargar el archivo share / fill_help_tables.sql manualmente), como: shell> mysql -u root mysql <fill_help_tables.sql

  • Puede obtener el archivo fill_help_tables.sql más reciente en cualquier momento para actualizar sus tablas de ayuda. Descargue el archivo correcto para su versión de MySQL desde http://dev.mysql.com/doc/index-other.html

03

ayuda Tabla de almacenamiento de información de ayuda en detalle

La sintaxis de ayuda admite consultas coincidentes de tres patrones: ver todas las categorías o subcategorías de nivel superior del tema, ver las palabras clave en los temas de ayuda y usar palabras clave únicas en un tema determinado para ver la información de ayuda. Esta información se almacena en help_category, help_topic, La tabla help_keyword y la tabla help_relation almacenan la información de mapeo de la información en las tablas help_topic y help_keyword. Lo siguiente será una divulgación científica simple para el conocimiento básico de estas tablas.

(1) help_category

Esta tabla proporciona información de categoría para consultar temas de ayuda. Cada categoría corresponde a N nombres de tema de ayuda o nombres de subcategoría de tema. También podemos ver en la información de la tabla de consulta, como sigue:

root@localhost : mysql 01:10:59> select * from help_category;
+------------------+-----------------------------------------------+--------------------+-----+
| help_category_id | name                                          | parent_category_id | url |
+------------------+-----------------------------------------------+--------------------+-----+
|                1 | Geographic                                    |                  0 |     |
|                2 | Polygon properties                            |                 35 |     |
......
|               39 | Functions                                     |                 36 |     |
|               40 | Data Definition                               |                 36 |     |
+------------------+-----------------------------------------------+--------------------+-----+
40 rows in set (0.00 sec)

Significado del campo de la tabla

  • help_category_id: el ID de registro del nombre del tema de ayuda o el nombre de la subcategoría en la tabla

  • name: nombre de categoría de tema de ayuda o nombre de categoría de palabra

  • parent_category_id: el ID de registro del nombre de la categoría principal de la materia en la tabla. Algunas categorías de materias tienen categorías de materias secundarias. Por ejemplo, la mayoría de las categorías de materias son en realidad subcategorías de la categoría Contenido (y son la categoría de nivel superior y la categoría principal de primer nivel). Algunas son subcategorías de la categoría de características geográficas (categoría principal de segundo nivel) y algunas son subcategorías de funciones (categoría principal de segundo nivel)

  • url: corresponde a la dirección del enlace en el manual oficial de MySQL

(2) help_keyword

Esta tabla proporciona información de la cadena de consulta relacionada con los temas de ayuda, de la siguiente manera:

root@localhost : mysql 01:12:07> select * from help_keyword limit 5;
+-----------------+---------+
| help_keyword_id | name    |
+-----------------+---------+
|             681 | (JSON   |
|             486 | ->      |
|             205 | ->>     |
|             669 | <>      |
|             521 | ACCOUNT |
+-----------------+---------+
5 rows in set (0.00 sec)

Significado del campo de la tabla

  • help_keyword_id: el ID del nombre de la palabra clave de ayuda se registra en la tabla

  • nombre: cadena de palabras clave de ayuda

(3) help_relation

Esta tabla proporciona el mapeo entre la información de la palabra clave de ayuda de la consulta y la información detallada del tema, y ​​se utiliza para correlacionar las tablas help_keyword y help_topic de la consulta, de la siguiente manera:

root@localhost : mysql 01:13:09> select * from help_relation limit 5;
+---------------+-----------------+
| help_topic_id | help_keyword_id |
+---------------+-----------------+
|             0 |               0 |
|           535 |               0 |
|           294 |               1 |
|           277 |               2 |
|             2 |               3 |
+---------------+-----------------+
5 rows in set (0.00 sec)

Significado del campo de la tabla

  • help_topic_id: ID de información detallada del tema de ayuda, el valor de ID es igual al help_topic_id en la tabla help_topic

  • help_keyword_id: ID de información de la palabra clave del tema de ayuda, el valor de ID es igual a help_keyword_id en la tabla help_keyword

(4) help_topic

Esta tabla proporciona contenido detallado (información de ayuda detallada) de una palabra clave determinada en el tema de ayuda de la consulta, de la siguiente manera:

root@localhost : mysql 01:13:31> select * from help_topic limit 1\G;
*************************** 1. row ***************************
help_topic_id: 0
        name: JOIN
help_category_id: 28
 description: MySQL supports the following JOIN syntaxes for the table_references
part of SELECT statements and multiple-table DELETE and UPDATE
statements:
table_references:
escaped_table_reference [, escaped_table_reference] ...
escaped_table_reference:
table_reference
| { OJ table_reference }
......
         url: http://dev.mysql.com/doc/refman/5.7/en/join.html
1 row in set (0.00 sec)

Significado del campo de la tabla

  • help_topic_id: el ID correspondiente a la información detallada del tema de ayuda en el registro de la tabla

  • name: el nombre de la palabra clave dada por el tema de ayuda, que es igual al valor del campo de nombre en la tabla help_keyword

  • help_category_id: ID de categoría de tema de ayuda, igual al valor del campo help_category_id en la tabla help_category

  • descripción: la información detallada del tema de ayuda (esto es lo que realmente queremos ver cuando usualmente consultamos la información de ayuda, por ejemplo: díganos cómo usar la gramática y las precauciones de una oración determinada)

  • ejemplo: la información de ejemplo del tema de ayuda (aquí nos dice un ejemplo de cómo usar la oración XX)

  • url: este tema de ayuda corresponde a la dirección del enlace URL en el manual oficial en línea de MySQL

04

Ejemplos de uso de declaraciones de ayuda

Como mencionamos anteriormente, la sintaxis de ayuda admite consultas coincidentes en tres patrones. Entonces, volviendo a la pregunta que planteamos al principio del artículo, no puedo recordar la ortografía específica de una oración, solo puedo recordar algunas letras vagamente, o decir muy claramente qué información de ayuda queremos verificar, pero no sé qué usar Palabra clave para consultar información de ayuda (por ejemplo: desea ver la declaración SQL que analiza el registro de retransmisión). ¿Qué hacer en este momento?

(1) ¿Qué debo hacer si solo recuerdo algunas letras?

La información de ayuda proporcionada por MySQL en realidad puede recibir directamente una palabra clave de asunto para la consulta, sin especificar el nombre del asunto. Si registra algunas letras de una palabra clave de cláusula SQL, puede usar estas letras para intentar varias veces ,como sigue:

root@localhost : performance_schema 10:43:40> help relay  # 尝试第一次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:00> help relay logs  # 尝试第二次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:06> help relaylogs  # 尝试第三次
Nothing found
Please try to run 'help contents' for a list of all accessible topics
root@localhost : performance_schema 10:44:09> help relaylog  # 尝试第四次,oy,成功了
Name: 'SHOW RELAYLOG EVENTS'
Description:
Syntax:
SHOW RELAYLOG EVENTS
[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]  # 原来是这样用的
Shows the events in the relay log of a replication slave. If you do not
specify 'log_name', the first relay log is displayed. This statement
has no effect on the master.
URL: http://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html

PD: En realidad, esto es equivalente a la palabra clave dada por la declaración de ayuda para que coincida con el campo de nombre de la tabla help_keyword. Si hay un retorno de registro, use las cuatro tablas help_category, help_keyword, help_relation y help_topic para hacer consultas complejas relacionadas, únase a la derecha de la tabla help_topic En el campo de nombre, si se devuelve un registro único, se devuelve información de ayuda. Si se devuelven varias filas, se devuelve una lista de palabras clave. Utilice estas palabras clave específicas para consultar información de ayuda específica, por ejemplo:

root@localhost : performance_schema 11:05:06> help where
.....
where <item> is one of the following
topics:  # 使用where作为关键字返回了一个关键字列表,表示where还会与这三个关键字组合使用,where的详细用法从列表中随便挑选一个关键字即可看到
DELETE
HANDLER
UPDATE
root@localhost : performance_schema 11:09:05> help delete
Name: 'DELETE'
Description:
Syntax:
DELETE is a DML statement that removes rows from a table.
Single-Table Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[PARTITION (partition_name,...)]
[WHERE where_condition]  # where关键字的用法在这里
[ORDER BY ...]
[LIMIT row_count]
......


(2) No recuerdo qué hacer

Si no recuerda nada, solo puede usar el método más tonto, la búsqueda de alfombras

Primero que nada, simplemente escribimos algunas letras para dar la oración de ayuda, por ejemplo: ayuda xxx

root@localhost : performance_schema 10:09:49> help xxx;
Nothing found  # 这句告诉你帮助信息没找到
# 不要紧,下面这句告诉你,用help contents语句来列出所有的可能的帮助主题信息
Please try to run 'help contents' for a list of all accessible topics

Luego, vea todas las categorías de temas

root@localhost : performance_schema 10:31:47> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
Account Management
Administration  # 通过主题或主题类别名称,大致判定一下,查看relaylog事件内容的语句应该是属于管理语句
Compound Statements
Data Definition
Data Manipulation
Data Types
Functions
Functions and Modifiers for Use with GROUP BY
Geographic Features
Help Metadata
Language Structure
Plugins
Procedures
Storage Engines
Table Maintenance
Transactions
User-Defined Functions
Utility

Utilice la Administración de ayuda para ver todas las palabras clave de este tema de ayuda.

root@localhost : performance_schema 10:37:27> help Administration
......
SHOW PROCEDURE CODE
SHOW PROCEDURE STATUS
SHOW PROCESSLIST
SHOW PROFILE
SHOW PROFILES
SHOW RELAYLOG EVENTS  # 找到了,在这里
......

Utilice la declaración SHOW RELAYLOG EVENTS para ver información de ayuda específica

root@localhost : performance_schema 10:41:53> help SHOW RELAYLOG EVENTS
Name: 'SHOW RELAYLOG EVENTS'
Description:
Syntax:
SHOW RELAYLOG EVENTS
[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]  # 原来是这样用的
Shows the events in the relay log of a replication slave. If you do not
specify 'log_name', the first relay log is displayed. This statement
has no effect on the master.
URL: http://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html

Bien, ahora creo que tiene una comprensión más clara de la composición del sistema de ayuda de MySQL y qué información de ayuda puede proporcionarnos la ayuda. Aquí hay algunos consejos más para todos:

  • Las palabras clave de búsqueda proporcionadas en la declaración HELP no distinguen entre mayúsculas y minúsculas

  • Las palabras clave de búsqueda pueden incluir comodines% y _, y el efecto es el mismo que el de la operación de coincidencia de patrones realizada por el operador LIKE. Por ejemplo: HELP'rep% 'devuelve una lista de temas que comienzan con rep

  • Si la cadena de categoría de ayuda y la cadena de tema de ayuda contienen varios caracteres, puede utilizar comillas o no. Para evitar la ambigüedad, es mejor utilizar comillas

05

Precauciones relacionadas con la hoja de información de ayuda

Para las instancias de base de datos que participan en la replicación, existen algunas consideraciones para ayudar a actualizar la tabla. Las tablas de ayuda están escritas en binlog de forma predeterminada (debido a que estas tablas de ayuda coinciden con la versión, debe actualizar la versión de una instancia y otras instancias deben actualizarse simultáneamente), por lo que debe considerar si necesita actualizar la tabla de ayuda de la biblioteca principal Al mismo tiempo, estas actualizaciones se sincronizan con la biblioteca esclava a través del binlog de la biblioteca maestra.

  • Si la versión de la biblioteca maestro-esclavo es diferente, entonces la biblioteca maestro-esclavo debe actualizarse por separado para ayudar a la tabla de información 

  • Si es una versión de MySQL anterior a la 5.7.5, las bibliotecas maestra y esclava actualizan respectivamente la tabla de información de ayuda usando el comando: mysql --init-command = "SET sql_log_bin = 0" mysql <fill_help_tables.sql

  • Si es MySQL 5.7.5 y versiones posteriores, no necesita usar --init-command = "SET sql_log_bin = 0", porque el archivo fill_help_tables.sql contiene SET sql_log_bin = 0, por lo que las bibliotecas maestra y esclava solo deben ejecutarse por separado Comando: mysql mysql <fill_help_tables.sql

  • Si la versión maestro-esclavo es la misma, entonces la biblioteca maestro-esclavo se puede actualizar en la biblioteca maestra y la tabla de información de ayuda de la biblioteca esclava se puede actualizar copiando

  • Si es la versión de MySQL anterior a 5.7.5, solo necesita ejecutar el comando en la biblioteca principal: mysql mysql <fill_help_tables.sql 

  • Si es MySQL 5.7.5 o posterior, primero debe modificar el archivo ll_help_tables.sql en el servidor de la biblioteca principal, eliminar SET sql_log_bin = 0 y luego ejecutar el comando en la biblioteca principal: mysql mysql <fill_help_tables.sql.

PD: antes de MySQL 5.7.5, estas tablas usaban MyISAM y cambiaron al motor InnoDB después de esta versión

| Sobre el autor

Luo Xiaobo · Experto en tecnología de base de datos ScaleFlux

Uno de los autores de "A Thousand Golden Recipes-MySQL Performance Optimization Pyramid Rule", "Data Ecology: MySQL Replication Technology and Production Practice".

Familiarizado con la arquitectura MySQL, bueno en el ajuste general de bases de datos, me gusta especializarse en tecnología de código abierto y interesado en la promoción de la tecnología de código abierto, ha compartido muchos temas de bases de datos públicas en línea y fuera de línea, y ha publicado casi 100 artículos de investigación relacionados con bases de datos.

Se acabó el texto completo.

Disfruta MySQL :)

La clase "MySQL Core Optimization" de Teacher Ye se ha actualizado a MySQL 8.0, escanee el código para comenzar el viaje de la práctica de MySQL 8.0

Supongo que te gusta

Origin blog.csdn.net/n88Lpo/article/details/110601002
Recomendado
Clasificación