Mysql 触发器实现调用外部程序

Mysql 触发器实现调用外部程序

github 上下面mysql 的插件程序, 下载后需要进行编译已适应你当前的操作系统环境(32/64 位), 当前此插件程序仅支持 Linux 操作系统

https://github.com/mysqludf/lib_mysqludf_sys

  1. 编译需要gcc 的支持

2. 将从git https://github.com/mysqludf/lib_mysqludf_sys 下载的 lib_mysqludf_sys-master 上传到 新建的文件夹内:如temp

  1. 解压之后,已经有了我们需要的 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’;

  1. 打开 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)]>

测试成功

Leave a Comment