您的位置:首页 > 数据库 > MySQL

MySQL使用udf调用系统程序

2016-05-06 13:30 561 查看
需要在mysql里调用系统程序执行,这个功能mysql默认不提供,但可以通过定义udf(自定义函数)实现。好在开源社区里已经有人为我们实现这个程序了。
1.下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysqludf_sys
2.解压文件,在源码目录里编译源代码:
gcc -DMYSQL_DYNAMIC_PLUGIN -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so
3.在mysql里查询mysql插件目录的路径:
show variables like “plugin_dir”;
再将编译好的lib_mysqludf_sys.so文件拷贝至mysql插件目录下。
4.在mysql中执行如下sql创建函数

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;

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_exec RETURNS int SONAME ‘lib_mysqludf_sys.so’;
CREATE FUNCTION sys_eval RETURNS string SONAME ‘lib_mysqludf_sys.so’;


到此mysqludf就安装完了,只要在sql里使用函数sys_exec()就能调用系统程序了。
注意:在编译源码时,可能会出现如下错误
In file included from lib_mysqludf_sys.c:40:
/usr/include/mysql/my_global.h:626:25: error: my_compiler.h: No such file or directory
这是一个mysql的bug引起的错误,只要修改/usr/include/mysql/my_global.h文件,注释掉626行重新编译就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: