mysql中使用lib_mysqludf_sys调用外部脚本

来源:赵克立博客 分类: 数据库 标签:mysql发布时间:2017-09-16 11:39:44最后更新:2019-05-11 10:12:49浏览:4698
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2019-05-11 10:12:49
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

windows下配置

开发环境

win764+mysql5.6.1

配置部署

首先下载对应的库文件

lib_mysqludf_sys.zip

里面有x86和x64位两个解压后放到对应的 mysql 目录中的 lib/plubin 中  一定要放这个目录中  mysql5.1 以上版本不放这个目录中无法使用

打开mysql可以执行命令行的地方创建自定义函数,下面创建两个函数一个是返回执行结果,另一个是返回命令行的字符串

DROP FUNCTION IF EXISTS sys_exec;
DROP FUNCTION IF EXISTS sys_eval;
CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_x64.dll';
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys_x64.dll';
SELECT sys_eval("ipconfig/all");

执行结果如图

image.png

在mysql数据库的表中会生成对应的两个函数的记录

image.png


linux下面配置(网上找的示例没有测试)

下载地址:https://github.com/mysqludf/lib_mysqludf_sys

使用方法
安装部署
a) lib_mysqludf_sys.so复制到mysql/lib/plugin目录下。

b) 在mysql中创建函数(根据需要选取):

Drop FUNCTION IF EXISTS lib_mysqludf_sys_info;
Drop FUNCTION IF EXISTS sys_get;
Drop FUNCTION IF EXISTS sys_set;
Drop FUNCTION IF EXISTS sys_exec;
Drop FUNCTION IF EXISTS sys_eval;
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 RETURNS int SONAME 'lib_mysqludf_sys.so';
Create FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';
Create FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';

使用此函数
例:在select语句调用mkdir命令

Select sys_exec('mkdir -p /home/user1/aaa')

例:在触发器中调用外部的脚本(脚本需要可执行权限)

Create TRIGGER trig_test AFTER Insert ON <table1>
FOR EACH ROW 
BEGIN
    DECLARE redata INT;
    Select sys_exec('/home/user1/test.sh') INTO redata;
END

判断更新后指定的字段有变化时才进行一些操作,如下判断价格有没有变化

CREATE TRIGGER `updateorder` AFTER UPDATE ON `order`
FOR EACH ROW 
begin
   DECLARE redata INT;
   if old.price<>new.price  then
     select sys_exec('E:/*****/socket.bat') into redata;
    end if;
end;

注意:调用外部脚本是同步执行的,也就是说如果脚本没有返回那么sql句话将不会结束,脚本执行时间过长,不要直接调用。此坑已踩 


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python