Mysql 触发器实现调用外部程序
从github 上下面mysql 的插件程序, 下载后需要进行编译已适应你当前的操作系统环境(32/64 位), 当前此插件程序仅支持 Linux 操作系统。
https://github.com/mysqludf/lib_mysqludf_sys
- 编译需要gcc 的支持
2. 将从git https://github.com/mysqludf/lib_mysqludf_sys 下载的 lib_mysqludf_sys-master 上传到 新建的文件夹内:如temp
-
解压之后,已经有了我们需要的 lib_mysqludf_sys.so 文件,不过默认是32位的,所以最好自己重新编译一下:
gcc -Wall -fPIC -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so
4. 将新编译得到的 lib_mysqludf_sys.so 复制到 myql 的 插件文件夹内
进入mysql 查询插件文件夹的路径
MariaDB > show variables like ‘plugin_dir’;
-
打开 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’;
6. 测试
测试
sys_eval
Sys_eval 会把全部echo 输出显示出来
MariaDB [(none)]> select sys_eval(‘date’);
+——————————-+
| sys_eval(‘date’) |
+——————————-+
| Mon Aug 5 05:30:28 EDT 2019
|
+——————————-+
1 row in set (0.01 sec)
MariaDB [(none)]>
测试 sys_exec
MariaDB [(none)]> select sys_exec(‘ls /temp/’);
+————————+
| sys_exec(‘ls /temp/*’) |
+————————+
| 0|
+————————+
1 row in set (0.01 sec)
MariaDB [(none)]>
— 测试成功 —