2012-10-12 51 views
3

我打电话从MySQL UDF功能sys_exec一个shell脚本:Mysql的UDF sys_exec函数调用shell脚本

SET cmd = CONCAT('cd /home/enablement;sh execute.sh ', CONCAT('1', ' ', '1', ' ', '1')); 
SET result = sys_exec(cmd); 
SELECT result FROM DUAL; 

但我在结果这可能是两个不同的用户一个对MySQL的得到一个错误代码32512和其他的Linux(对于execute.sh脚本),请你指导我如何能够让mysql用户在调用sys_exec函数时访问execute.sh文件。

感谢进阶

+0

如果这是MYSQL它不会工作,你需要指定你的变量,例如:' SET @cmd:= CONCAT('cd/home/enablement; sh execute.sh',CONCAT('1','','1','','1'));' – jcho360

+0

yes vararaiable cmd is declared in程序,我知道错误是因为没有访问文件execute.sh,如何我可以让这个shell脚本(execute.sh)可以访问mySQL用户吗? –

回答

3

我知道这个职位是旧的,但也许这将帮助别人
你应该这样做
$ sudo /etc/init.d/apparmor stop
因为AppArmor的限制你的UDF函数的执行。

+1

谢谢@ user1722669。因为sys_exec总是返回32512,所以我一直在琢磨着我的脑袋。sudo /etc/init.d/apparmor拆卸确实有帮助! – rsmoorthy

0

请不要完全停止apparmor,只需在apparmor的mysqld配置文件中启用您的用例。例如,我需要在mysql中使用redis。

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld 

那么,在年底

/usr/bin/redis-cli mr, 

插入此行保存文件并重新加载的AppArmor

sudo service apparmor reload