mysql udf 的实现过程
首先编写一个实现curl提交的udf,文件名起名为lib_mysqludf_clearcache.c
mysql udf 编写的相关规范可以查看mysql官方手册
http://dev.mysql.com/doc/refman/5.1/zh/extending-mysql.html#adding-functions
#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)#define DLLEXP __declspec(dllexport) #else#define DLLEXP#endif#ifdef STANDARD#include <string.h>#include <stdlib.h>#include <time.h>#ifdef __WIN__typedef unsigned __int64 ulonglong;typedef __int64 longlong;#elsetypedef unsigned long long ulonglong;typedef long long longlong;#endif /*__WIN__*/#else#include <my_global.h>#include <my_sys.h>#endif#include <mysql.h>#include <m_ctype.h>#include <m_string.h>#include <stdio.h>#include <stdlib.h>#include <curl/curl.h>#include <ctype.h>#define DEST_URL "http://www.web.com/"my_bool clear_cache_init(UDF_INIT *initid, UDF_ARGS *args, char *message){ return 0;}void clear_cache_deinit(UDF_INIT *initid){}char *clear_cache(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error){ CURL *curl; CURLcode res; // 初始化curl curl = curl_easy_init(); if(curl != NULL) { // 设置目标url curl_easy_setopt(curl,CURLOPT_URL,DEST_URL); // 输出header头部信息 curl_easy_setopt(curl,CURLOPT_HEADER,0); // 执行操作 res = curl_easy_perform(curl); // 执行回收资源 curl_easy_cleanup(curl); } return 0;}
然后编译生成so文件
gcc -I /usr/include/mysql -shared lib_mysqludf_clearcache.c -o lib_mysqludf_clearcache.so -lcurl
第三步把lib_mysqludf_clearcache.so复制到mysql的插件目录
cp lib_mysqludf_clearcache.so /usr/lib/mysql/plugin/
第四步进入mysql
执行
CREATE FUNCTION clear_cache RETURNS INTEGER SONAME 'lib_mysqludf_clearcache.so';
然后执行 select clear_cache()查看自定义函数是否执行成功