mysql上線調試(mysql源碼調試)

本文目錄一覽:

mysql怎麼調試存儲過程

mysql調試存儲過程具體方法:

在你的存儲過程中加入如下語句:

SELECT

變數1,變數2;

然後用mysql自帶的cmd程序進入mysql

下。

call

你的存儲過程名(輸入參數1,@輸出參數);(注:這裡幫助下新同學,如果你的存儲過程有輸出變數,那麼在這裡只需要加

@

然後跟任意變數名即可);

即可發現你的變數值被列印到了cmd下

新手如何調試 MySQL?看這一篇就夠了

前幾天看到姜老師的舊文 用 VSCode 編譯和調試 MySQL,每個 DBA 都應 get 的小技能[1] , 文末留了一個思考題,如何修改源碼,自定義版本,使得 select version() 輸出自定義內容

調試過程參考 macOS VSCode 編譯調試 MySQL 5.7[2]

內部 Item 對象參考 從SQL語句到MySQL內部對象[3]

源碼面前沒有秘密,建義對 DB 感興趣的嘗試 debug 調試。本文環境為 mac + vscode + lldb

vscode 插件:

mysql 源碼:

補丁: MySQL = 8.0.21 需要對 cmake/mysql_version.cmake 文件打補丁 (沒有嚴格測試所有版本)

創建 cmake-build-debug 目錄,後續 mysql 編譯結果,以及啟動後生成的文件都在這裡

在 mysql 工程目錄下面創建 .vscode/settings.json 文件

內容沒啥好說的,都是指定目錄及 boost 配置,其中 WITH_DEBUG 打開 debug 模式,會在 /tmp/debug.trace 生成 debug 信息

View – Command Palette – CMake: Configure 執行後生成 cmake 配置

View – Command Palette – CMake: Build 編譯生成最終 mysql 相關命令

發現老版本編譯很麻煩,各種報錯,mysql 5.7 代碼量遠超過 5.5, 只能硬著頭皮看 5.7

首先初始化 my.cnf 配置,簡單的就可以,共它均默認

初始化數據文件,非安全模式,調試用

由於用 vscode 接管 mysql, 所以需要配置 .vscode/launch.json

然後點擊 run and debug mysqld

mysql 啟動,看到輸出日誌無異常,此時可以用 mysql-client 連接

首先在 sql_parser.cc:5435 處打斷點

mysql_parse 是 sql 處理的入口,至於 tcp connection 連接先可以忽略

執行上述 sql 自動跳轉到斷點處, Step Into , Step Over , Step Out 這些調試熟悉下即可

接下來分別調用主要函數: mysql_execute_command , execute_sqlcom_select , handle_query , select-join-exec() , Query_result_send::send_data , Item::send , Item_string:val_str , Protocol_text::store , net_send_ok

啟動 mysql 時 init_common_variables 會初始化一堆變數,其中會調用 set_server_version 生成版本信息,修改這個就可以

看好條件編譯的是哪塊,修改即可, 重新 CMake: Build 編譯再運行

這裡不做過深分析,簡單講

sql_yacc.cc 函數 PTI_function_call_generic_ident_sys 解析 sql, 識別出 version() 是一個函數調用

find_native_function_builder 查找 hash 表,找到對應 version 函數註冊的單例工廠函數

mysql 啟動時調用 item_create_init 將這些函數 builder 註冊到 hash 表 native_functions_hash

MySQL 代碼太龐大,5.1 大約 100w 行,5.5 130w 行,5.7 以後 330w 行,只能挑重點讀源碼。最近很多群里的人在背八股,沒必要,有那時間學著調試下源碼,讀讀多好

原文出處:

mysql存儲過程如何調試

可以使用調試工具:

dbForge Studio for MySQL

網上有很多教程,你可以試下

mysql性能調試工具有哪些

ber-int-cols=N, -y N 自動生成的測試表中包含多少個數字類型的列,默認1

–number-of-queries=N 總的測試查詢次數(並發客戶數×每客戶查詢次數)

–query=name,-q 使用自定義腳本執行測試,例如可以調用自定義的一個存儲過程或者sql語句來執行測試。

–create-schema 代表自定義的測試庫名稱,測試的schema,MySQL中schema也就是database。

–commint=N 多少條DML後提交一次。

–compress, -C 如果伺服器和客戶端支持都壓縮,則壓縮信息傳遞。

–concurrency=N, -c N 表示並發量,也就是模擬多少個客戶端同時執行select。可指定多個值,以逗號或者–delimiter參數指定的值做為分隔符。例如:–concurrency=100,200,500。

如何在Windows下編譯或調試MySQL

準備工作:

安裝一個編譯器,推薦Microsoft visual studio 2008吧

另外需要裝:

GNU Bison for Windows :

CMake 2.6.0 or later :

開始編譯:

這裡以mysql-5.1.38的源碼編譯為例:

mysql-5.1.38的代碼下載可以到mysql官方網站下載,具體怎麼下載不在說明。

打開一個cmd窗口:

輸入:

cscript //H:CScript

然後:

cd /path/mysql-5.1.38

win\configure WITH_INNOBASE_STORAGE_ENGINE __NT__

win\build-vs9.bat

到此我們將會創建一個mysql.sln 的工程文件,如果對想學習代碼的朋友,到此即可以,然後可以用Microsoft visual studio 2008打開這個文件就可以查看相應的代碼了。

如果需要調試或單步執行調試:

這裡以mysqld項目為例:

打開項目 mysqld 的屬性 點擊 debugging

在mysqld的屬性頁設置命令參數(Command Arguments)為:–console。這樣就可以用debug方式調試代碼了。

同樣對於其它項目的調試,也是這樣處理,屬性,添加命令行參數:–console。

對於想跟蹤的項目可以執行build,然後可以在mysql-5.1.38/client/Debug下生成相應的執行文件。

原創文章,作者:IARO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/132654.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
IARO的頭像IARO
上一篇 2024-10-03 23:53
下一篇 2024-10-03 23:53

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27
  • CentOS 7在線安裝MySQL 8

    在本文中,我們將介紹如何在CentOS 7操作系統中在線安裝MySQL 8。我們會從安裝環境的準備開始,到安裝MySQL 8的過程進行詳細的闡述。 一、環境準備 在進行MySQL …

    編程 2025-04-27

發表回復

登錄後才能評論