programing

Mysql sys_exec 공유 라이브러리 'lib_mysqludf_sys.so'를 열 수 없습니다(errno: 11, 잘못된 ELF 클래스: ELFCLASS32)

randomtip 2022. 12. 31. 16:41
반응형

Mysql sys_exec 공유 라이브러리 'lib_mysqludf_sys.so'를 열 수 없습니다(errno: 11, 잘못된 ELF 클래스: ELFCLASS32)

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 입니다.

그걸 고칠 방법을 찾았어요

우선, 인스톨 할 필요가 있습니다.default-libmysqlclient-devunix로

다음 명령을 실행합니다.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.soMariaDB/MySQL 플러그인 폴더, 어떤 폴더인지 어떻게 알 수 있습니까?

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/

그 후 트리거를 생성하여 자체 OS 상에서 실행하는 데 필요한 모든 것을 실행할 수 있습니다.

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

그럼 다 되는 거야!!!

언급URL : https://stackoverflow.com/questions/55241615/mysql-sys-exec-cant-open-shared-library-lib-mysqludf-sys-so-errno-11-wrong

반응형