2012-10-12 47 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