妙博客

主机评测 香港服务器 洛杉矶VPS测评

linux centos 安装lib_mysqludf_sys调用外部程序

1.下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysqludf_sys

2.解压之后,删除 lib_mysqludf_sys.so 文件,自己重新编译一下image.png

gcc -Wall -fPIC -I/phpstudy/mysql/include/ -I. -shared lib_mysqludf_sys.c -o lib_mysqludf_sys.so

3.可以看到已经生成了一个新的so文件:lib_mysqludf_sys.so。查看一下插件目录

show VARIABLES like 'plugin_dir'

可以看到输出如下:

plugin_dir/phpstudy/mysql/lib/plugin/

4.我们把 lib_mysqludf_sys.so 复制到/phpstudy/mysql/lib/plugin/下面

5.打开mysql客户端,执行以下sql语句

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.新建更新触发器

DELIMITER $$
USE `test`$$
drop TRIGGER if EXISTS `test@test_tb@update`;
CREATE
    TRIGGER `test@test_tb@update` AFTER UPDATE  ON `test_tb` 
    FOR EACH ROW BEGIN
DECLARE ret INT DEFAULT 999; 
        SET ret = sys_exec(CONCAT('/phpstudy/server/php/bin/php /data/mysql_php_trigger/trigger.php', ' ',
  'test', ' ', 'test_tb' , ' ', old.id, ' ', 'update'));
    END;
$$
DELIMITER ;

7.新建删除触发器

DELIMITER $$
USE `test`$$
drop TRIGGER if EXISTS `test@test_tb@delete`;
CREATE
    TRIGGER `test@test_tb@delete` AFTER delete  ON `test_tb` 
    FOR EACH ROW BEGIN
DECLARE ret INT DEFAULT 999; 
        SET ret = sys_exec(CONCAT('/phpstudy/server/php/bin/php /data/mysql_php_trigger/trigger.php', ' ',
  'test', ' ', 'test_tb' , ' ', old.id, ' ', 'delete'));
    END;
$$
DELIMITER ;

8.新建一个php文件在/data/mysql_php_trigger/trigger.php,写入如下内容

<?php
var_dump($argv);
$file = "/data/mysql_php_trigger/phpWriteTest.txt";
// 写入文件,并返回写入的字节数
$result = file_put_contents($file, $argv);


9.打开测试库test,给test_tb表修改一条数据,即可看到已经执行了触发器

Copyright Your 142132.com Rights Reserved. 赣ICP备17010829号-2