mysql 调用外部程序

一、下载 lib_mysqludf_sys:

下载地址:https://github.com/mysqludf/repositories

 

二、配置与使用:

 

1、解压之后,已经有了我们需要的 lib_mysqludf_sys.so 文件,不过默认是32位的,所以最好自己重新编译一下:

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

2、把 lib_mysqludf_sys.so 复制到 /usr/local/mysql/lib/plugin/ 文件中

3、打开 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';

4、找到要操作的库,新建触发器:

DELIMITER $$



USE `sailing`$$



DROP TRIGGER /*!50032 IF EXISTS */ `pay_check_trig`$$



CREATE

    /*!50017 DEFINER = 'root'@'%' */

    TRIGGER `pay_check_trig` AFTER INSERT ON `pay_record` 

    FOR EACH ROW BEGIN

    DECLARE ret INT DEFAULT 999; 

    IF new.status = 1 THEN        

        SET ret = sys_exec(CONCAT('/mysql_udf/pay_ok.py ',new.playerId,' ',new.value));

    END IF;

    END;

$$



DELIMITER ;

5、在 linux 的 /mysql_udf/pay_ok.py 里写上如下代码:

#!/usr/bin/python

#coding:utf-8

import sys

import smtplib

from email.mime.text import MIMEText



mailto_list=['[email protected]']

mail_host="smtp.163.com"  #设置服务器

mail_user="[email protected]"   #用户名

mail_pass="123456"   #口令

mail_postfix="163.com"  #发件箱的后缀





def send_mail(to_list,sub,content):

    me=u"sailing server"+"<"+mail_user+"@"+mail_postfix+">"

    msg = MIMEText(content,_subtype='plain',_charset='gb2312')

    msg['Subject'] = sub

    msg['From'] = me

    msg['To'] = ";".join(to_list)

    try:

        server = smtplib.SMTP()

        server.connect(mail_host)

        server.login(mail_user,mail_pass)

        server.sendmail(me, to_list, msg.as_string())

        server.close()

        return True

    except Exception, e:

        print str(e)

        print 'error'

        return False



if __name__ == '__main__':

    playerid = sys.argv[1]

    value = sys.argv[2]

    send_mail(mailto_list,u"成功充值通知",u"玩家ID:%s 刚刚成功购买了 %s 个金币!" % (playerid,value))

6、向相应表中插入一条数据,测试一下。

 

三、关于其它 mysqludf 相关学习

更多资料,参考:http://www.taki.com.tw/blog/mysql-udf/

你可能感兴趣的:(mysql)