UDF结果错误

我尝试安装“mysqludf_sys”。 但是我得到这个错误:

ERROR 1126 (HY000) at line 29: Can't open shared library 'lib_mysqludf_sys.so' (errno: 0 /usr/lib/mysql/plugin/lib_mysqludf_sys.so: cannot open shared object file: No such file or directory) ERROR: unable to install the UDF 

所以,我试图通过Makefile中的以下修改来解决这个问题:

 LIBDIR=/usr/lib to LIBDIR=/usr/lib/mysql/plugin 

还要确保gcc具有-fPIC选项,即:

 gcc -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so 

但是,当我testingsys_eval,我得到:

 mysql> SELECT sys_eval('id'); +----------------+ | sys_eval('id') | +----------------+ | | +----------------+ 1 row in set (0.02 sec) 

我应该得到:

 mysql> SELECT sys_eval('id'); +-------------------------------------------------+ | sys_eval('id') | +-------------------------------------------------+ | uid=105(mysql) gid=108(mysql) groups=108(mysql) | +-------------------------------------------------+ 1 row in set (0.01 sec) 

我testing了“sys_exec”也创build一个文件,但没有结果

那么,我该如何正确运行这些function呢? 问候

Solutions Collecting From Web of "UDF结果错误"

感谢罗兰。

所以,我的问题的答案是“AppArmor”。

维基百科:

AppArmor允许系统管理员与每个程序关联一个安全配置文件,该配置文件限制了该程序的功能。 它通过提供强制访问控制(MAC)来补充传统的Unix自由访问控制(DAC)模型。

由于Ubuntu Hardy,MySQL 5.0服务器软件包还包含限制MySQL服务器功能的AppArmor配置文件(/etc/apparmor.d/usr.sbin.mysqld),例如调用UDF来执行命令。

所以,为了让MySQL运行Linux命令,我应该改变AppArmor中MySql的安全级别。

 [root@xxx ~]# aa-complain /usr/sbin/mysqld 

查看AppArmor的状态:

  [root@xxx ~]# aa-status 

有了这个配置,我可以执行sys_eval和sys_exec。 但那仍然限于mysql目录。 所以我不能创建文件或从任何目录运行脚本。

所以解决的办法是增加许可权来让mysql访问新的数据目录。

 sudo vi /etc/apparmor.d/usr.sbin.mysqld 

加:

 /newdir/ r, /newdir/** rwk, 

重新启动服务器:

 sudo /etc/init.d/apparmor restart sudo /etc/init.d/mysql restart 

如果仍然不起作用,请检查nix权限以确保mysql是新目录的所有者和组。

 chown -R mysql:mysql “new datadir path” 

我希望这有助于某人。

投标

你打电话的id应该是一个可执行文件。 脚本一般不是自己可执行的,你可能应该修改这行以读取bash path/to/script.sh以便它成为一个有效的可执行命令行。

此外,还有很多sys_exec和朋友因为应用程序防护设置而无法工作的报告。 检查应用程序装甲是否启用,如果是,修改它的配置以允许udfs运行。

HTH。