[英]call external script with mySQL trigger WHITOUT sys_exec on ubuntu ARMHF
我需要從觸發器調用外部腳本來攔截數據庫中的每個插入。 這是因為我不能輪詢這個值,我正在編寫一個帶有ARM架構的嵌入式系統,只有250MB的RAM。 觸發器是正確的選項,觸發器的代碼運行良好,我得到:
FUNCTION mydb.sys_exec does not exist (MySQL error code: 1305, SQLState: 42000 )
所以我試着安裝這個: https : //github.com/mysqludf/lib_mysqludf_sys
但它讓我:
ERROR: You need libmysqlclient development software installed
to be able to compile this UDF, on Debian/Ubuntu just run:
apt-get install libmysqlclient15-dev
所以,如果我輸入
sudo apt-get install libmysqlclient15-dev
我明白了:注意,選擇'libmysqlclient-dev'而不是'libmysqlclient15-dev'
當然它不是正確的包裝,因為它不起作用。 git中包含的.so文件是為intelx86編譯的。
有人有想法嗎? 在git中編譯.c是非常不可能的,因為很多缺少依賴項。
或..如何在沒有sys_exec的情況下從觸發器執行外部腳本?
PS:為了完整性,這是觸發器腳本:
DELIMITER @@
CREATE TRIGGER command_controller
AFTER INSERT ON myDB.foo
FOR EACH ROW
BEGIN
DECLARE cmd CHAR(255);
DECLARE result int(10);
SET cmd='./foo ';
SET result = sys_eval(cmd);
END;
@@
DELIMITER ;
這是一個適合我的最小版本:
#include <string.h>
#include <stdlib.h>
#include <mysql.h>
my_bool sys_exec_init(
UDF_INIT *initid
, UDF_ARGS *args
, char *message
){
unsigned int i=0;
if(args->arg_count == 1
&& args->arg_type[i]==STRING_RESULT){
return 0;
} else {
strcpy(
message
, "Expected exactly one string type parameter"
);
return 1;
}
}
void sys_exec_deinit(
UDF_INIT *initid
){
}
my_ulonglong sys_exec(
UDF_INIT *initid
, UDF_ARGS *args
, char *is_null
, char *error
){
return system(args->args[0]);
}
我用這行編譯它:
gcc -Wall -I include -I /home/rbouman/mysql/mysql-5.6.10-linux-glibc2.5-x86_64/include -shared -fPIC -o sys_exec.so sys_exec.c
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.