UDF功能可以是我们自定义mysql函数,处理相关业务需求.
例子来源淘宝数据库内核月报:http://mysql.taobao.org/monthly/2019/02/08/
创建放置udf文件的目录
mkdir -p /data1/mycode/mysql_debug/mysql-8.0.18/UDF
编写第一个udf文件(取mysqld进程id)
//文件名mysqld_pid.cpp
#include "mysql.h"
#include <sys/types.h> /* getpid() */
#include <unistd.h> /* getpid() */
extern "C" bool
mysqld_pid_init(UDF_INIT *initid __attribute__((unused)),
UDF_ARGS *args __attribute__((unused)),
char *message __attribute__((unused)))
{
return false;
}
extern "C" long long
mysqld_pid(UDF_INIT *initid __attribute__((unused)),
UDF_ARGS *args __attribute__((unused)),
char *is_null __attribute__((unused)),
char *error __attribute__((unused)))
{
return getpid();
}
创建插件目录
mkdir -p /data1/mycode/mysql_debug/mysql-8.0.18/mysql_stuff/install/lib/plugin
编译.so文件
g++ -I/data1/mycode/mysql_debug/mysql-8.0.18/include -fPIC -g -shared -o /data1/mycode/mysql_debug/mysql-8.0.18/mysql_stuff/install/lib/plugin/libmysqld_pid.so mysqld_pid.cpp
其中编译中出现的错误
image.png
解决方法:在编译之前,注释掉mysql.h文件中的 #include "mysql_version.h"
登录mysql客户端,加载UDF函数
CREATE FUNCTION mysqld_pid RETURNS INT SONAME 'libmysqld_pid.so';
image.png
查看UDF函数
select * from performance_schema.user_defined_functions;
image.png
使用UDF函数
select mysqld_pid();
image.png
网友评论