天天看點

Mysql安裝udf調用系統程式問題解決

在使用編譯出的lib_mysqludf_sys.so遇到了如下等等問題

1.

failed:FUNCTION ramsdb.sys_exec does not exist!
           

2.

ERROR  (HY000): Can't open shared library 'lib_mysqludf_sys.so' (errno: /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
           
Mysql安裝udf調用系統程式問題解決

4. 登入mysql, 執行sql>

Mysql安裝udf調用系統程式問題解決

5. 取得plugin_dir,即更新檔目錄:/usr/lib64/mysql/plugin/,将上一步編譯得到的lib_mysqludf_sys.so拷貝至/usr/lib64/mysql/plugin/

6. 在/usr/lib64/mysql/plugin/目錄下設定權限:

chmod  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語句

Mysql安裝udf調用系統程式問題解決

8.來個觸發器測下:

DELIMITER $$

USE `testsb`$$
DROP TRIGGER /*! IF EXISTS */ `t_working`$$
CREATE
    /*! DEFINER = 'root'@'%' */
    TRIGGER `t_working` BEFORE UPDATE ON `t_tel` 
    FOR EACH ROW BEGIN 
    DECLARE done INT DEFAULT ; 
   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 ;
           

大功告成!

繼續閱讀