有時候為了方便,利用event/trigger呼叫系統外部命令,可因為安全問題,mysql自身並沒有提供相關命令,這裡提供個呼叫系統命令的自定義函式mylab_sys_exec
載入:createfunctionmylab_sys_exec returns integersoname"mylab_sys_exec.so";
使用:selectmylab_sys_exec('cmd');
原始碼:my_bool mylab_sys_exec_init(udf_init *initid, udf_args *args,char*message);voidmylab_sys_exec_deinit(udf_init *initid);intmylab_sys_exec(udf_init *initid, udf_args *args,char*is_null,char*error);
marco ivaldi 幾年前曾經發表過乙個 raptor_udf2.c,演示了如何利用mysql udf入侵系統,但是這個mysql udf也演示了乙個呼叫系統命令的方式。但是這一外掛程式目前應經不能相容mysql 5.0+,主要是已經不符合新的mysql udf的規範了,並且沒有返回結果。
mysql user-defined functions 是 roland bouman 開發的乙個新的呼叫系統命令的udf包,其中有三個函式:
sys_exec: 呼叫系統命令,執行外部程式
sys_get: 返回系統環境變數的值
sys_set: 設定系統環境變數
這一mysql udf 包是相容mysql 5.0+ ,同時支援linux和windows。但是這一包也有乙個問題,執行命令後返回是命令的exit_code ,而不是命令的執行結果。
bernardo damele a. g. 針對這一問題做了乙個更新包,增加了乙個sys_eval函式,這一函式命令執行成功返回執行結果,而如果錯誤返回null。
使用例項:
$ wget --no-check-certificate
$ tar xfz lib_mysqludf_sys_0.0.3.tar.gz
$ cd lib_mysqludf_sys_0.0.3
$ sudo ./install.sh
compiling the mysql udf
gcc -wall -i/usr/include/mysql -i. -shared lib_mysqludf_sys.c -o /usr/lib/lib_mysqludf_sys.so
mysql udf compiled successfully
please provide your mysql root password
enter password:
mysql udf installed successfully
$ mysql -u root -p mysql
enter password:
mysql> select sys_eval('id');
| sys_eval('id') |
| uid=118(mysql) gid=128(mysql) groups=128(mysql) |
1 row in set (0.02 sec)
mysql> select sys_exec('touch /tmp/test_mysql');
| sys_exec('touch /tmp/test_mysql') |
| 0 |
1 row in set (0.02 sec)
mysql> exit
bye$ ls -l /tmp/test_mysql
-rw-rw---- 1 mysql mysql 0 2009-01-16 23:18 /
cmd 執行命令
一 一鍵開啟執行 開啟 執行 視窗,都是通過 開始 選單中的命令來完成的。其實我們可以為執行建立乙個快捷方式,一鍵開啟執行視窗。右擊桌面上的快捷方式,開啟屬性視窗。切換到 快捷鍵 方式選項卡,在 快捷鍵 裡面輸入乙個按鍵,然後單擊 確定 按鈕,這樣我們要開啟執行視窗時只需要按下該快捷鍵即可。二 快速...
後台執行命令
1.cron是系統主要的排程程序,可以在無需人工干預的情況下執行作業。有乙個叫做crontab的命令允許使用者提交 編輯或刪除相應的作業。2.crob的域 第1列 分鐘1 59 第2列 小時1 23 0表示子夜 第3列 日1 31 第4列 月1 12 第5列 星期0 6 0表示星期天 第6列 要執行...
遠端執行命令
遠端執行命令 這個分兩步,很簡單很實用。第一步,設定ssh免認證,免認證就是只不用密碼認證就可以直接登入,這在寫指令碼伺服器控制時特別有用。ssh keygen t rsa cd ssh ssh copy id xuexi01注 xuexi01是主機名,也可寫成ip,如192.168.2.11 第二...