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;