Linux上MySQL UDF函式開發除錯的方法

2021-09-09 07:10:42 字數 1155 閱讀 3919

mysql支援通過動態庫檔案擴充套件資料庫的功能,開發範例可參考官網上的介紹: ,除錯的時候一開始考慮在c的主函式中對函式進行呼叫,生成可執行檔案,執行檔案檢視結果;但在除錯通過後並部署到mysql的server上的時候,卻出現了很多的段錯誤,因為實際執行環境不一樣了,折騰了好久,在此總結一下除錯此類udf的一種方法

開發工具:visual studio code (c語言)

編譯工具:gcc

編譯環境:red hat enterprise linux server release 6.4 64位

資料庫:mysql 5.6.42 linux

除錯工具:gdb

udf開發可參考:

官方指引:

開發完**後,將*****.c及其引用到的檔案拷貝到伺服器上,執行類似以下命令

gcc -g ***.c -i 鏈結庫/頭檔案目錄 -fpic -shared -o ***.so

隨後將so檔案(windows平台是dll檔案)拷貝到伺服器上mysql安裝目錄的plugin中,登入mysql執行

create function *** returns string soname 『***.so』;即可建立函式

建立函式之後可直接select ***(『引數』);的方式進行測試,但如果**有問題,此時資料庫可能會直接掛掉並斷開連線,檢視err日誌檔案只能看到一些位址的資訊,並顯示指標錯誤之類的資訊,但無法準確定位到出問題的**,此時可利用gdb進行除錯;

mysql的說明文件上有對於系統crash的debug指引:具體步驟:

關閉正在執行的mysql

在gdb中啟動mysql,輸入gdb --args /usr/sbin/mysqld (mysqld的路徑可以通過which mysqld查詢)

輸入 r --user=root讓mysql執行起來

另外開啟乙個視窗,登入到mysql,建立函式並呼叫函式,此時在之前gdb的視窗就能實時列印出執行的資訊,如果發生了報錯也會將詳細資訊列印,並可用backtrace向前追溯,這樣就能定位具體出錯的**了

另外,在**裡面的printf語句此時也能輸出到視窗中,可以檢視變數的值。gdb除錯方法指引:

工具的熟悉太重要,不會使用工具只會將時間浪費在沒有效率的嘗試上面。mysql udf功能雖然強大,但使用起來必須謹慎,如果出現指標的錯誤,容易導致資料庫的crash,具體經驗:

linux下 udf提權 mysql udf提權

前言 udf user defined function 即 使用者自定義函式 檔案字尾為 dll 常用c語言編寫。通過在udf檔案中定義新函式,對mysql的功能進行擴充,可以執行系統任意命令。將mysql賬號root轉化為系統system許可權。思路 1.將udf檔案上傳到指定位置 sqlmap...

Linux多執行緒 pthread exit函式

執行緒的終止可以呼叫pthread exit函式來結束。也就是說,乙個執行緒可以隱式的退出,也可以顯式的呼叫pthread exit函式來退出。pthread exit函式唯一的引數value ptr是函式的返回 include void pthread exit void retval threa...

Linux系統wait 和waitpid 函式

include include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如果讓它找到了這樣乙個已經變成殭屍的子程序,wait就會收集這個子程序的資訊,並把它徹底銷毀後返回 如果沒有找到這樣乙個子程序,wa...