Mysql安装udf调用系统程序问题解决

在使用编译出的lib_mysqludf_sys.so遇到了如下等等问题
1.

 failed:FUNCTION ramsdb.sys_exec does not exist!

2.

 ERROR 1126 (HY000): Can't open shared library 'lib_mysqludf_sys.so' (errno: 11/usr/lib64/mysql/plugin/lib_mysqludf_sys.so: wrong ELF class: ELFCLASS32)

完整安装udf调用系统程序具体步骤如下:

  1. 下载https://github.com/mysqludf/lib_mysqludf_sys#readme
  2. zip解压,然后复制到/opt目录下
  3. cd /opt ,编译so文件:
 gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

这里写图片描述
4. 登录mysql, 执行sql>

SHOW VARIABLES LIKE 'plugin_dir';

这里写图片描述
5. 取得plugin_dir,即补丁目录:/usr/lib64/mysql/plugin/,将上一步编译得到的lib_mysqludf_sys.so拷贝至/usr/lib64/mysql/plugin/
6. 在/usr/lib64/mysql/plugin/目录下设置权限:

 chmod 777 lib_mysqludf_sys.so

7.拷贝lib_mysqludf_sys.sql里边的sql语句,

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';

并在mysql执行所有sql语句
这里写图片描述

8.来个触发器测下:

DELIMITER $$

USE `testsb`$$
DROP TRIGGER /*!50032 IF EXISTS */ `t_working`$$
CREATE
    /*!50017 DEFINER = 'root'@'%' */
    TRIGGER `t_working` BEFORE UPDATE ON `t_tel` 
    FOR EACH ROW BEGIN 
    DECLARE done INT DEFAULT 0; 
   IF new.ACTIVE!=old.ACTIVE THEN
   SET done = sys_exec("sh /home/working/test.sh");
    UPDATE t_working SET working=new.ACTIVE WHERE id=new.wkID;
    END IF;
    END;
$$

DELIMITER ;

大功告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值