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

时间:2019-03-19 12:57:26

标签: mysql mariadb

我正在尝试使用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。

1 个答案:

答案 0 :(得分:2)

我找到了一种解决方法:

首先,我们需要在Unix上安装.js

运行命令:default-libmysqlclient-dev

然后从https://github.com/mysqludf/lib_mysqludf_sys

下载存储库

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

apt-get install default-libmysqlclient-dev

然后将gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -m64 -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so复制到MariaDB / MySQL plugins文件夹中,如何知道该文件夹?

lib_mysqludf_sys.so

在我的情况下,我的命令应该是:

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)

之后,我们可以创建触发器并运行在自己的OS:D上运行所需的一切

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

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

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

然后一切正常!