gpt4 book ai didi

mysql - 在 ubuntu ARMHF 上使用 mySQL 触发器 WHITOUT sys_exec 调用外部脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:56 24 4
gpt4 key购买 nike

我需要从触发器调用外部脚本来拦截数据库中的每个插入。这是因为我无法轮询该值,所以我正在为具有 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:为了完整起见,这是触发脚本:

分隔符@@

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

关于mysql - 在 ubuntu ARMHF 上使用 mySQL 触发器 WHITOUT sys_exec 调用外部脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16195894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com