¿Cómo depuran MySQL los novatos?
Hace unos días, leí el antiguo artículo del profesor Jiang sobre el uso de VSCode para compilar y depurar MySQL, una habilidad que todo DBA debería dominar [1]. Dejé una pregunta al final del artículo, pensando. sobre cómo modificar el código fuente para personalizar la versión. Deje que select version() genere contenido personalizado
Para conocer el proceso de depuración, consulte Compilación de macOS VSCode y depuración de MySQL 5.7[2]
No hay secretos en el código fuente. Si está interesado en DB, intente depurarlo. Este artículo se aplica a mac + vscode + lldb
complemento vscode:
código fuente de mysql:
parche: MySQL <= 8.0.21 necesita parche cmake/mysql_version.cmake (no todas las versiones se prueban estrictamente)
Cree el directorio cmake-build-debug, y los archivos generados después de la posterior compilación e inicio de mysql se ubicarán en este directorio
Crear en el directorio mysql el archivo .vscode/settings.json
El contenido de este archivo no es nada que escribir, pero especifica el directorio y la configuración de inicio, en el que CON_DEBUG activa el modo de depuración
El contenido de este archivo no se puede escribir. DEBUG activa el modo de depuración y genera información de depuración en /tmp/debug.trace
Ver -> Paleta de comandos -> CMake: Configurar genera la configuración de cmake después de la ejecución
Ver -> Paleta de comandos -> CMake: compila el comando final relacionado con la compilación de MySQL
Encontré que la versión anterior de la compilación era muy problemática y reportaba varios errores. 7 tiene más código que 5.5, así que tuve que mirar 5.7
Primero, inicialice la configuración de my.cnf, una configuración simple *** es la predeterminada
Inicialice el archivo de datos en modo no seguro para depuración
Debido a que vscode se hace cargo de mysql, debe configurar .vscode/launch.json
Luego haga clic en Ejecutar y depurar mysqld
p >Se inicia Mysql, verá que la salida del registro es normal. Step Into, Step Over, Step Out puede estar familiarizado con estas depuraciones
A continuación, llame a las funciones principales: mysql_execute_command, ejecutar_sqlcom_select, handle_query, select->join->exec(), Query_ result_send::send_send: :send () , Query_ result_send::send_send::send_send result_send::send_data , Item::send , Item_string:val_str , Protocol_text::store , net_send_ok
init_common_variables inicializará un montón de variables al iniciar mysql .
La función .cc PTI_function_call_generic_ident_sys analiza el sql y reconoce que version() es una llamada de función
find_native_function_builder busca en la tabla hash y encuentra la función de fábrica singleton correspondiente al registro de la función de versión.
Se llama a Item_create_init cuando mysql comienza a registrar estos constructores de funciones en la tabla hash Native_functions_hash
El código MySQL es muy grande, alrededor de 1 millón de líneas en 5.1 y alrededor de 1,3 millones de líneas en 5.5 , 5.7 y versiones posteriores tienen alrededor de 330.000 líneas, por lo que debes elegir lo que deseas leer. No sé si puedo hacer esto. Recientemente, muchas personas en el grupo están memorizando el código fuente, por lo que no es necesario.
Código fuente original: /s/lJqb0kMtnAUmqUIWCShkIQ
Fuente original: /s/lJqb0kMtnAUmqUIWCShkIQ