mysql觸發器呼叫外部指令碼

2021-09-29 10:54:39 字數 1948 閱讀 1940

mysql觸發器呼叫外部指令碼,我查詢資料後選擇使用lib_mysqludf_sys,但是中間出現很多問題,記錄下來正確方式分享如下:

使用系統centos 7.5 64位

首先是獲取lib_mysqludf_sys

github:

把檔案上傳到伺服器

使用方法在lib_mysqludf_sys.html中有介紹,主要就是lib_mysqludf_sys.so,能直接用最好,但是大多數不能直接用,要自己再次編譯生成.so

編譯lib_mysqludf_sys.c檔案生成.so

問題1:沒有gcc就要先安裝gcc

yum install gcc  

問題2:缺少my_global.h等檔案,安裝mysql-devel

yum install mysql-devel  

開始編譯

gcc -shared -o lib_mysqludf_sys.so  lib_mysqludf_sys.c  -i /usr/include/mysql  -fpic   

此處是我在centos 7.5 64位下編譯好的檔案

把.so移動到mysql的plugin中

mv lib_mysqludf_sys.so /usr/local/mysql/lib/plugin/  

登陸資料庫新增功能函式,直接執行sql語句,其他功能可參照html檔案中的手冊

create function lib_mysqludf_sys_info returns string soname 『lib_mysqludf_sys.so』;  

create function sys_get returns string soname 『lib_mysqludf_sys.so』;  

create function sys_set returnsintsoname 『lib_mysqludf_sys.so』;  

create function sys_exec returnsintsoname 『lib_mysqludf_sys.so』;  

create function sys_eval returns string soname 『lib_mysqludf_sys.so』;  

sql語句,插入觸發器,這樣就會呼叫1.php指令碼

drop trigger if exists `wp_insert`;  

create definer=`root`@`localhost` trigger `wp_insert` after insert on `wp_users` for each row begin set @xlog_return = (select sys_eval(concat(『/usr/bin/php -f /home/wwwroot/1.php』)));   

end  

帶入引數的呼叫,例如代入正在操作的id,將上面set替換成下面這樣

set @xlog_return = (select sys_eval(concat(『/usr/bin/php -f /home/wwwroot/1.php 『,new.id)));   

正在刪除的id

set @xlog_return = (select sys_eval(concat(『/usr/bin/php -f /home/wwwroot/1.php 『,old.id)));   

這樣操作是正常了,但是運算元據庫去沒有反應,原因是呼叫觸發器,資料庫認為該條指令還沒結束,也就是還沒有真正的插入,所以查詢不到該條資訊,我們可以使用nohup命令在後台執行指令碼,然後在指令碼中運算元據庫之前加入適當的延時

set @xlog_return = (select sys_eval(concat(『nohup /usr/bin/php -f /home/wwwroot/1.php 『,new.id,『 >/dev/null 2>&1 &』)));  

mysql觸發器呼叫外部指令碼

思路 需要安裝乙個mysql的udf函式。這樣就可以了。原始碼 在tbls表上面建立觸發器 由於不能查詢到剛插入的那條記錄。所以只能在這邊手動的傳參 drop trigger trigger tbls create trigger trigger tbls after insert on hive ...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

my sql 觸發器 mysql建立觸發器

首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...