Welcome 微信登录

首页 / 数据库 / MySQL / MysSQL&MariaDB用trigger调用shell

Windows环境下: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.dll";
CREATE FUNCTION sys_get RETURNS string SONAME "lib_mysqludf_sys.dll";
CREATE FUNCTION sys_set RETURNS int SONAME "lib_mysqludf_sys.dll";
CREATE FUNCTION sys_exec RETURNS int SONAME "lib_mysqludf_sys.dll";
CREATE FUNCTION sys_eval RETURNS string SONAME "lib_mysqludf_sys.dll";select sys_eval("ipconfig");Linux环境下:在mysql的触发器中执行一个外部程序。步骤如下:一、解压附件的压缩包之后如果不想自己编译的话,把lib_mysqludf_sys.so文件放到 mysql的lib/mysql/plugin/目录下。二、执行chcon -t texrel_shlib_t mysql/lib/mysql/plugin/lib_mysqludf_sys.so三、创建函数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";
四、测试1、准备sh文件
在linux系统中执行下面的命令
su mysql
mkdir /mysqlUDFtestcd mysqlUDFtest
vi test.sh#/bin/sh
date > testlog.txtchmod +x ./test.sh
2、准备数据库表和触发器
选择一个数据库执行如下命令:CREATE TABLE test1(a1 INT) engine=InnoDB;
CREATE TABLE test2(a2 INT) engine=InnoDB;DELIMITER |DROP TRIGGER /*!50032 IF EXISTS */ `test`.`testref`|create trigger `test`.`testref` BEFORE INSERT on `test`.`test1`
for each row BEGIN
DECLARE done INT DEFAULT 999;
set done = sys_exec("/mysqlUDFtest/test.sh");
INSERT INTO test2(a2)values(2);
END;
|DELIMITER ;3、向test1表中插入一条数据后,请在Linux命令行:用root用户,执行以下命令:find / -name testlog.txt查找testlog.txt文件。在 CentOS/RHEL/Scientific Linux 6 下安装 LAMP (Apache with MariaDB and PHP) http://www.linuxidc.com/Linux/2013-07/86755.htmMariaDB Proxy读写分离的实现 http://www.linuxidc.com/Linux/2014-05/101306.htmLinux下编译安装配置MariaDB数据库的方法 http://www.linuxidc.com/Linux/2014-11/109049.htmCentOS系统使用yum安装MariaDB数据库 http://www.linuxidc.com/Linux/2014-11/109048.htm安装MariaDB与MySQL并存 http://www.linuxidc.com/Linux/2014-11/109047.htmMariaDB 的详细介绍:请点这里
MariaDB 的下载地址:请点这里本文永久更新链接地址