MYSQL
HOME > DB > MYSQL
2018.09.30 / 22:37

Mysql UDF ( os command 사용 )

GAScripter
추천 수 17

mysql에서 OS command를 실행할 수 있는 방법

출처 : https://github.com/mysqludf/lib_mysqludf_sys
     : lib_mysqludf_sys.c 만 받으면 됨
     : 해당 파일은 파일 첨부 됨

소스 복사>
cp lib_mysqludf_sys.c /usr/local/mysql/include/
cd /usr/local/mysql/include

컴파일>
gcc -m64 -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o /usr/local/mysql/lib/plugin/lib_mysqludf_sys.so

접속>
mysql -uroot -p 
use mysql

function 생성>
CREATE FUNCTION lib_mysqludf_sys_info RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_get RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_set RETURNS int SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_eval RETURNS string SONAME 'lib_mysqludf_sys.so';
CREATE FUNCTION sys_exec RETURNS int SONAME 'lib_mysqludf_sys.so';


DROP FUNCTION IF EXISTS lib_mysqludf_sys_info;
DROP FUNCTION IF EXISTS sys_get;
DROP FUNCTION IF EXISTS sys_set;
DROP FUNCTION IF EXISTS sys_exec;
DROP FUNCTION IF EXISTS sys_eval;


function 확인>
select * from mysql.func;

실행 테스트>
select sys_eval('df -h') from dual;


load average
uptime | awk '{print $8}' | sed '$s/.$//'

memory 사용량
free | grep Mem | awk '{print $3}'

memory 전체
free | grep Mem | awk '{print $2}'

cpu 사용율
mpstat | tail -1 | awk '{print 100-$11}'


-------------

insert into kim_test
select sys_eval("uptime | awk '{print $8}' | sed '$s/.$//'") ;
insert into kim_test
select sys_eval("free | grep Mem | awk '{print $3}'") ;
insert into kim_test
select sys_eval("mpstat | tail -1 | awk '{print 100-$11}'") ;