mysql-udf-http 安裝及使用

發佈於 2024-03-21  2,615 次閱讀


mysql-udf-http說明

  • 此套件的用途為讓mysql bash也能執行HTTP請求(POST, GET…)
  • 可透過Trigger調用API

此路徑為CentOS下使用yum install安裝mysql後實際路徑

mysql安裝路徑

/var/lib/mysql

插件資料夾原始路徑

/usr/lib64/mysql/plugin

mysql安裝路徑相關查詢方法

1.使用mysql shell查詢安裝檔案路徑

mysql> show variables like "%datadir%";

2.查詢mysql相關資料夾及檔案

whereis mysql

mysql_udf_http安裝說明

1.下載mysql_udf_http壓縮檔
https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/mysql-udf-http/mysql-udf-http-1.0.tar.gz
2.解壓縮
tar zxvf mysql-udf-http-1.0.tar.gz
3.進入資料夾
cd mysql-udf-http-1.0/
4.編譯安裝檔(注意--prefix內路徑需改為mysql實際安裝路徑)
./configure --prefix=/var/lib/mysql --with-mysql=/etc/my.cnf
  • 如果提示缺少libcurl,需安裝curl
yum install curl*
5.安裝
make && make install
  • 如果報錯,說明缺少mysql源代碼文件(mysql-devel)
#需安裝mysql-devel
yum install mysql-devel

安裝完header檔路徑為/usr/include/mysql
回到第4部重新編譯後安裝
若是安裝完mysql-devel仍然報錯,需將header檔複製到解壓縮後資料夾/src底下,重新編譯後安裝

6.如果安裝後沒有報錯,mysql_udf_http插件實際安裝路徑
/var/lib/mysql/lib/

須將此路徑軟連結到實際插件路徑(前為mysql_udf_http實際安裝路徑,後為plugin路徑,plugin路徑後須加上.so檔)

ln -s /var/lib/mysql/lib/mysql-udf-http.so /usr/lib64/mysql/plugin/mysql-udf-http.so
7.使用mysql shell註冊幾個可使用的函數
mysql> create function http_get returns string soname 'mysql-udf-http.so';
mysql> create function http_post returns string soname 'mysql-udf-http.so';
mysql> create function http_put returns string soname 'mysql-udf-http.so';
mysql> create function http_delete returns string soname 'mysql-udf-http.so';

註冊成功無報錯,即可正常使用

mysql_udf_http使用方法

1.配合mysql trigger使用方式
SELECT http_post('http://XXX.XXX.XXX.XXX/api/test', 'key=value&key=value') INTO @tmp;

最後的INTO @tmp必須加上(trigger不允許返回結果集),否則報錯

2.mysql shell使用方式
mysql> SELECT http_post('http://XXX.XXX.XXX.XXX/api/test', 'key=value&key=value');

MySQL8使用者注意

MySQL8改變了部分名稱,按照上面流程make & make install時會報錯如下:

mysql-udf-http.c:8:1: error: unknown type name ‘my_bool’
 my_bool http_get_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
 ^
mysql-udf-http.c:12:1: error: unknown type name ‘my_bool’
 my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
 ^
mysql-udf-http.c:16:1: error: unknown type name ‘my_bool’
 my_bool http_put_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
 ^
mysql-udf-http.c:20:1: error: unknown type name ‘my_bool’
 my_bool http_delete_init(UDF_INIT *initid, UDF_ARGS *args, char *message);
 ^
mysql-udf-http.c:52:1: error: unknown type name ‘my_bool’
 my_bool http_get_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
 ^
mysql-udf-http.c:125:1: error: unknown type name ‘my_bool’
 my_bool http_post_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
 ^
mysql-udf-http.c:203:1: error: unknown type name ‘my_bool’
 my_bool http_put_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
 ^
mysql-udf-http.c:282:1: error: unknown type name ‘my_bool’
 my_bool http_delete_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
 ^
make[2]: *** [mysql-udf-http.lo] Error 1
make[2]: Leaving directory `/root/mysql-udf-http-1.0/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/mysql-udf-http-1.0/src'
make: *** [all-recursive] Error 1

原因為MySQL8裡沒有my_bool,須將/src/mysql-udf-http.c中的my_bool改為_Bool
更改完後重新編譯後再安裝應該就不會報錯了

參考網頁

https://blog.csdn.net/HAOWENQI008/article/details/79110089
https://blog.csdn.net/weixin_30381317/article/details/95407079?tdsourcetag=s_pctim_aiomsg
https://www.jianshu.com/p/b1b794e12013
https://blog.csdn.net/m0_37952030/article/details/90745286
https://blog.csdn.net/qq_40914968/article/details/81382988


莫札特曾經說過大膽地踏上旅途吧
我不知道路途的前方究竟有什麼
但是
我們還是邁出了步伐
我們仍在旅途之中