【问题标题】:Mysql sys_exec Can't open shared library 'lib_mysqludf_sys.so' (errno: 11, wrong ELF class: ELFCLASS32)Mysql sys_exec 无法打开共享库'lib_mysqludf_sys.so'(错误号:11,错误的 ELF 类:ELFCLASS32)
【发布时间】:2019-03-19 12:57:25
【问题描述】:

我正在尝试使用 sys_exec 在 unix 上运行本机命令,但我尝试将插件从 https://github.com/mysqludf/lib_mysqludf_sys 放入

进入/usr/lib/x86_64-linux-gnu/mariadb18/plugin# 但是当我尝试在下面运行这个命令时:

create function sys_exec returns int soname 'lib_mysqludf_sys.so';

我收到此回复:

ERROR 1126 (HY000): Can't open shared library 'lib_mysqludf_sys.so' (errno: 11, wrong ELF class: ELFCLASS32)

它是 MariaDB 15.1。

【问题讨论】:

    标签: mysql mariadb


    【解决方案1】:

    我找到了解决这个问题的方法:

    首先我们需要在unix上安装default-libmysqlclient-dev

    运行命令:apt-get install default-libmysqlclient-dev

    然后从https://github.com/mysqludf/lib_mysqludf_sys下载存储库

    下载完成后我们可以运行这个命令:

    gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -m64 -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

    然后将lib_mysqludf_sys.so复制到MariaDB/MySQL plugins文件夹下,怎么知道是哪个文件夹?

    MariaDB [(none)]> SHOW VARIABLES LIKE 'plugin_dir';
    +---------------+---------------------------------------------+
    | Variable_name | Value                                       |
    +---------------+---------------------------------------------+
    | plugin_dir    | /usr/lib/x86_64-linux-gnu/mariadb18/plugin/ |
    +---------------+---------------------------------------------+
    1 row in set (0.00 sec)
    

    就我而言,我的命令应该是:

    cp lib_mysqludf_sys.so /usr/lib/x86_64-linux-gnu/mariadb18/plugin/

    之后,我们可以创建触发器并运行我们需要在我们自己的操作系统上运行的所有内容:D

    CREATE TABLE `trig_test` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `random_data` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    );
    
    DELIMITER @@
    CREATE TRIGGER trig_test 
    AFTER INSERT ON `trig_test`
    FOR EACH ROW 
    BEGIN
     DECLARE cmd CHAR(255);
     DECLARE result int;
     SET cmd=CONCAT('node /tmp/script/script.js >> /tmp/script/result.txt');
     SET result = sys_exec(cmd);
    END;
    @@
    DELIMITER ;
    
    INSERT INTO trig_test
    (random_data)
    VALUES('GOOOO!!!');
    

    如果您无法运行检查权限所需的命令,我将我的所有者和组从 /tmp 更改为测试

    chown -R mysql.mysql /tmp

    然后一切正常!!!

    【讨论】:

    • 你会分享你的 64 位 lib_mysqludf_sys.so 吗?谢谢
    • 这个插件甚至可以运行在 x86 或 64 位,因为我们的服务器都是 64 位的,并且可以工作,试试这个告诉我是否正确,否则我们可以一起处理这个问题! ! :)
    • 我做了,但我仍然出错。我正在使用 Centos 7 x64 和 15.1 Distrib 5.5.64-MariaDB
    • 你的方式可行,但似乎不可能将变量从触发器传递到 cmd,详情请参阅 Github link
    猜你喜欢
    • 2015-04-22
    • 2014-11-20
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2022-08-17
    • 2013-09-05
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多