zoukankan      html  css  js  c++  java
  • 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=['123456789@qq.com']
    mail_host="smtp.163.com"  #设置服务器
    mail_user="888888888@163.com"   #用户名
    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/

  • 相关阅读:
    MSSQL Rebuild(重建)索引
    网络爬虫原理
    Twitter Storm:单机环境的安装与配置
    1079 回家
    Win2003 Server磁盘配额揭密之补遗篇
    Win2003 Server磁盘配额揭密之启用篇
    编译mapnik(win7 环境下vs2008编译mapnik 0.7.1 成功)
    Writing a Windows Shell Extension(marco cantu的博客)
    Android学习之一:Cygwin简介
    Linux 进程间通信(一)
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/3657586.html
Copyright © 2011-2022 走看看