MySQL环境查询
查询mysql插件目录的路径
show variables like "plugin_dir";
查看MySQL的位数
show variables like '%version_%';
lib_mysqludf_sys安装
https://github.com/mysqludf/lib_mysqludf_sys
A UDF library with functions to interact with the operating system. These functions allow you to interact with the execution environment in which MySQL runs.
目录结构如下:
编译源码
修改Makefile文件, 根据自身系统的MySQL环境而定
原Makefile
LIBDIR=/usr/lib
install:
gcc -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so
修改后Makefile
LIBDIR=/usr/lib/mysql/plugin
install:
gcc -fPIC -Wall -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o $(LIBDIR)/lib_mysqludf_sys.so
执行make,生成新的lib_mysqludf_sys.so
注:源码自带的lib_mysqludf_sys.so为32位
在/usr/lib64/mysql/plugin目录下是否有lib_mysqludf_sys.so,如果mysql是docker环境,采用如下命令:
docker cp lib_mysqludf_sys.so a6e96adf79e2:/usr/lib/mysql/plugin/
创建函数
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';
错误
ERROR 1126 (HY000): Can’t open shared library ‘lib_mysqludf_sys.so’ (errno: 2 /usr/lib/mysql/plugin/lib_mysqludf_sys.so: wrong ELF class: ELFCLASS32)
查看自带的lib_mysqludf_sys.so文件
file lib_mysqludf_sys.so
这是在32位系统下编译的lib_mysqludf_sys.so ,而我们的MySQL位数为X86_64
查看make生成的lib_mysqludf_sys.so文件
file lib_mysqludf_sys.so
执行lib_mysqludf_sys
SELECT sys_eval('pwd');
select * from mysql.func;