1.下载lib_mysqludf_sys程序:https://github.com/mysqludf/lib_mysqludf_sys
2.解压之后,删除 lib_mysqludf_sys.so 文件,自己重新编译一下
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表修改一条数据,即可看到已经执行了触发器