打电话与MySQL触发外部脚本在Ubuntu ARMHF WHITOUT sys_exec(

2019-09-01 01:35发布

我需要从一个触发器调用外部脚本拦截在DB每次插入。 这是因为我不能轮询这种价值,我编码与ARM架构和RAM 250MB唯一的嵌入式系统。 触发器是正确的选择,而触发的代码工作得很好,我得到:

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。

任何人有一个想法? 编译.C在GIT这是由于该地段缺少的依赖关系完全不可能。

或..我怎么能不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 ;

Answer 1:

下面是对我工作的最低版本:

#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


文章来源: call external script with mySQL trigger WHITOUT sys_exec on ubuntu ARMHF