在使用編譯出的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調用系統程式具體步驟如下:
- 下載下傳https://github.com/mysqludf/lib_mysqludf_sys#readme
- zip解壓,然後複制到/opt目錄下
- 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>
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語句
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 ;
大功告成!