본문 바로가기
프로그램 (PHP,Python)

MySQL UDF를 활용한 사용자 정의 함수 추가

by 날으는물고기 2010. 1. 19.

MySQL UDF를 활용한 사용자 정의 함수 추가

1. 추가할 함수 구현

 - syslogudf.c 파일에 기능 구현
#include <mysql.h>
#include <string.h>
#include <syslog.h>

my_bool logger_init(UDF_INIT *initid, UDF_ARGS *args,
char *message) {
initid->maybe_null=0;
return 0;
}

long long logger(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error) {
if (args->arg_count != 1) {
strcpy(error, "LOGGER(): needs message");
return 1;
}

if (args->arg_type[0] != STRING_RESULT) {
strcpy(error, "LOGGER() message
should be string");
return 1;
}

syslog(LOG_INFO,"%s",args->args[0]);
*is_null = 0;
*error = 0;

return 0;
}
2. 컴파일
gcc -I /usr/include/mysql/ -shared -o syslogudf.so syslogudf.c
3. MySQL에 함수 추가를 위한 so로드
mysql> create function logger returns integer soname 'syslogudf.so';
Query OK, 0 rows affected (0.00 sec)
4.테스트

 - 임의로 syslog떨어뜨리기 위한 쿼리 만들어서 실행함
mysql> select logger(concat(user()," wishes you ",
-> if(rand()>0.3,"good","bad")," luck"));
5. syslog 결과
$ tail -1 /var/log/messages
May 12 15:57:09 mimul sshd(pam_unix)[26045]: authentication failure;
logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=202.96.189.83
May 12 15:57:11 mimul mysqld max: root@mimul wishes you bad luck


출처 : http://mimul.com/pebble/

728x90

댓글