Mysql sys_exec Can';t打开共享库';lib#mysqludf#u sys.so';(错误号:11,错误的ELF类:ELF类32)

Mysql sys_exec Can';t打开共享库';lib#mysqludf#u sys.so';(错误号:11,错误的ELF类:ELF类32),mysql,mariadb,Mysql,Mariadb,我尝试使用sys_exec在unix上运行本机命令,但我尝试从 进入/usr/lib/x86_64-linux-gnu/mariadb18/plugin但是当我尝试运行以下命令时: create function sys_exec返回int soname'lib_mysqludf_sys.so' 我收到的答复如下: 错误1126(HY000):无法打开共享库'lib_mysqludf_sys.so'(错误号:11,错误的ELF类:ELFCLASS32) 这是MariaDB 15.1。我找到了一种

我尝试使用sys_exec在unix上运行本机命令,但我尝试从

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

create function sys_exec返回int soname'lib_mysqludf_sys.so'

我收到的答复如下:

错误1126(HY000):无法打开共享库'lib_mysqludf_sys.so'(错误号:11,错误的ELF类:ELFCLASS32)


这是MariaDB 15.1。

我找到了一种解决方法:

首先,我们需要在unix上安装
defaultlibmysqlclient-dev

运行命令:
apt get install default libmysqlclient dev

然后从以下位置下载存储库:

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

gcc-DMYSQL\u DYNAMIC\u PLUGIN-fPIC-Wall-m64-I/usr/include/mysql-I.-shared lib\u mysqludf\u sys.c-o lib\u mysqludf\u sys.so

然后将
lib\u mysqludf\u 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\u mysqludf\u sys.so/usr/lib/x86\u 64-linux-gnu/mariadb18/plugin/

在那之后,我们可以创建触发器并运行我们需要在自己的OS: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更改为tests

chown-R mysql.mysql/tmp


然后一切正常

您是否愿意共享64位lib_mysqludf_sys.so?谢谢这个插件甚至可以在x86或64位上运行,因为我们的服务器都是64位的,并且工作正常,试试这个,告诉我它是否正确,否则我们可以一起处理这个问题!!:)我做了,但我还是犯了错误。我正在使用Centos 7 x64和
15.1发行版5.5.64-MariaDB
您的方式工作,但似乎无法将变量从触发器传递到cmd,请参阅Github上的详细信息