기타

Mysql 에서 외부 프로그램 실행시키기

콜레오네 2020. 8. 21. 22:14

Execute external program on Mysql


Mysql 혹은 MariaDB에서 외부 파일을 실행시키는 방법을 알아보았습니다.

 

기존 파이썬에서 DB를 연동하여 pymysql 라이브러리를 통해 데이터를 조작할 수 있었는데,

이번에는 Mysql에서 파이썬 프로그램을 실행해서 데이터를 입력하는 방법을 알아보려 합니다.

 

참고로 Mssql에서는 xp_cmdshell 이라는 기능을 활용하여 외부 프로그램을 실행시킬 수 있다고 합니다.

Oracle에서도 비슷한 기능을 지원한다고 하네요.


UDF(User Define Funtion)을 활용해야합니다.

UDF중 sys_exec() 함수를 활용해야 하는데, lib_mysqludf_sys.dll 파일이 필요합니다.

 

윈도우 환경에서는 lib_mysqludf_sys.dll 이고,

기타 우분투나 리눅스 환경에서는 lib_mysqludf_sys.so 입니다.

 

기타 환경에서 설치하는 방법은 다른 블로그에 충분히 설명이 되어있어서,

윈도우 환경에서 다룰 수 있는 방법에 대해 설명하겠습니다.

 

 

설치하기

https://github.com/sqlmapproject/sqlmap/issues/2965

위 깃허브 링크에서 압축 파일을 다운받아 풀어줍니다.

페이지를 내리다보면 압축 파일이 있고, 안에 lib_mysqludf_sys.dll 파일이 있습니다.

혹은

lib_mysqludf_sys_64.zip
0.01MB

위 파일을 다운로드 받으셔도 됩니다.

 

참고로 so 파일 및 기타 파일은

https://github.com/mysqludf/lib_mysqludf_sys

에서 받으실 수 있습니다.

 

 

다운받은 lib_mysqludf_sys.dll 파일을 Mysql 설치 폴더 아래 plugin 폴더에 넣어줍니다.

plugin 폴더는 다음과 같이 확인할 수 있습니다.

 

이후 lib_mysqludf_sys.dll 파일을 활용해서 sys_exec() 함수를 생성해야 합니다.

 

>> CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.dll';

 

위 쿼리를 이용해서 함수를 생성합니다.

다른 자세한 쿼리는 아래 블로그에서 확인 가능합니다.

https://whackur.tistory.com/92

 

함수를 생성했다면, 아래 쿼리를 입력하여 함수 생성 여부를 확인해봅니다.

 

>> SELECT * FROM mysql.func;

 


함수 생성이 완료되었으면 외부 파일을 실행시켜봅시다.

 

실행 파일 실행시키기

>> SELECT sys_exec(" name.exe ");

 

위 쿼리를 통해 name.exe라는 실행 파일을 실행시킬 수 있습니다.

이때 실행 파일은 Mysql 설치 폴더 안의 data 폴더 안에 위치해야합니다.

아니면, 따로 실행 파일의 경로를 함께 입력해주어야 합니다.

 

>> SELECT sys_exec(" C:/file_box/name.exe ");

 

이런 식으로 말이죠.

 

sys_exec() 함수는 외부 파일의 실행 결과 코드를 반환하게 됩니다.

결과 코드가 0으로 출력되면 올바르게 실행한 것입니다.

기타 다른 숫자가 출력된다면, 오류가 발생한 것입니다.

실행 파일에 오류가 있을 수도 있고, 경로 안에 실행 파일이 없을 수도 있습니다.

따로 오류 코드를 보여주는 것은 아니니 주의하시기 바랍니다.

 

 

파이썬 실행시키기

파이썬을 실행할 경우, 파이썬 설치 경로를 함께 입력해주어야 합니다.

>> SELECT sys_exec(" [파이썬 설치 경로/python.exe]  [실행하려는 파이썬 파일 경로/python.py] ");

이런식으로 입력해주시면 됩니다.

 

예시로서

>> SELECT sys_exec(" C:\Python\Python38-32\python.exe C;\program.py ");

이런식으로 실행할 수 있습니다.

 


주의사항

sys_exec()를 사용할 때, 주의사항이 있습니다.

 

sys_exec로 외부 파일을 실행시키는 도중,

외부 파일이 또다른 외부 프로그램을 실행시키는 경우라면, 오류가 발생합니다.

 

예를 들면,

저같은 경우에 selenium 모듈이 포함된 exe 파일을 생성해서 실행을 시켰는데요.

selenium에서 외부 web driver를 사용하다보니, 오류가 발생하였습니다.

 

이런 한계가 있다는 점 알아두시면 좋겠습니다.

 


Mysql 혹은 MariaDB에서 외부 프로그램 (exe파일, python파일)을 실행시키는 방법에 대해 알아보았습니다.

혹시 다른 방법으로 외부 프로그램을 실행하신 분들은 댓글 남겨주시면 감사하겠습니다.

 

위 방법으로 실행하던 도중, 질문이 있으시다면 메일 보내주세요.

>> corleone@kakao.com

반응형