mysql触发器调用外部脚本

本文详细介绍了如何在CentOS7.5环境下,通过lib_mysqludf_sys库使MySQL触发器调用外部PHP脚本的方法。从安装依赖、编译生成.so文件到创建并使用自定义函数,再到触发器的设置与参数传递,提供了完整的步骤和解决方案。

mysql触发器调用外部脚本,我查找资料后选择使用lib_mysqludf_sys,但是中间出现很多问题,记录下来正确方式分享如下:

使用系统CentOS 7.5 64位

  1. 首先是获取lib_mysqludf_sys

    GitHub:https://github.com/mysqludf/lib_mysqludf_sys

也可在我的CSDN下载https://download.csdn.net/download/shaynerain/10715798

  1. 把文件上传到服务器

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

  2. 编译lib_mysqludf_sys.c文件生成.so

     问题1:没有gcc就要先安装gcc

    1. yum install gcc  

    问题2:缺少my_global.h等文件,安装mysql-devel

    1. yum install mysql-devel  

    开始编译

    1. gcc -shared -o lib_mysqludf_sys.so  lib_mysqludf_sys.c  -I /usr/include/mysql  -fPIC   

    此处是我在CentOS 7.5 64位下编译好的文件https://download.csdn.net/download/shaynerain/10715818

  3. 把.so移动到mysql的plugin中
    1. mv lib_mysqludf_sys.so /usr/local/mysql/lib/plugin/  
  4. 登陆数据库添加功能函数,直接执行sql语句,其他功能可参照html文件中的手册
    1. CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME ‘lib_mysqludf_sys.so’;  
    2. CREATE FUNCTION sys_get RETURNS string SONAME ‘lib_mysqludf_sys.so’;  
    3. CREATE FUNCTION sys_set RETURNS int SONAME ‘lib_mysqludf_sys.so’;  
    4. CREATE FUNCTION sys_exec RETURNS int SONAME ‘lib_mysqludf_sys.so’;  
    5. CREATE FUNCTION sys_eval RETURNS string SONAME ‘lib_mysqludf_sys.so’;  
  5. SQL语句,插入触发器,这样就会调用1.php脚本

    1. DROP TRIGGER IF EXISTS `wp_insert`;  
    2. 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’)));   
    3. END  

带入参数的调用,例如代入正在操作的ID,将上面SET替换成下面这样

  1. SET @xlog_return = (SELECT sys_eval(CONCAT(‘/usr/bin/php -f /home/wwwroot/1.php ‘,new.id)));   

正在删除的ID

  1. SET @xlog_return = (SELECT sys_eval(CONCAT(‘/usr/bin/php -f /home/wwwroot/1.php ‘,old.id)));   

这样操作是正常了,但是操作数据库去没有反应,原因是调用触发器,数据库认为该条指令还没结束,也就是还没有真正的插入,所以查询不到该条信息,我们可以使用nohup命令在后台执行脚本,然后在脚本中操作数据库之前加入适当的延时

  1. SET @xlog_return = (SELECT sys_eval(CONCAT(‘nohup /usr/bin/php -f /home/wwwroot/1.php ‘,new.ID,‘ >/dev/null 2>&1 &’)));  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值