MySQL-fifo-Plugin 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
MySQL-fifo-Plugin 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
MySQL-fifo-Plugin 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
MySQL-fifo-Plugin 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
MySQL-fifo-Plugin 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 BSD
开发语言 C/C++
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
提 交 者 netkiller-
适用人群 未知
收录时间 2013-12-16

软件简介

MySQL fifo Plugin 是数据库与其他第三方应用程序进程间通信解决方案。

1. 背景

你是否有这样的需求:

你需要监控访问网站的IP,当同一个IP地址访问次数过多需要做出处理,例如拉黑,直接丢进iptables 防火墙规则连中。你的做法只能每个一段时间查询一次数据库,并且判断是否满足拉黑需求?

你是否需要监控某些数据发生变化,并通知其他程序作出处理。例如新闻内容修改后,需要立即做新页面静态化处理,生成新的静态页面

你使用数据库做队列,例如发送邮件,短信等等。你要通知发送程序对那些手机或者短线发送数据

2. 解决思路

需要让数据库与其他进程通信,传递信号

例如,发送短信这个需求,你只要告诉发短信的机器人发送的手机号码即可,机器人永远守候那哪里,只要命令一下立即工作。

监控数据库变化的需求原理类似,我们需要有一个守护进程等待命令,一旦接到下达命令便立即生成需要的静态页面

这里所提的方案是采用 fifo(First In First Out) 方案,通过管道相互传递信号,使两个进程协同工作,这样的效率远比定时任务高许多。fifo 是用于操作系统内部进程间通信,如果跨越操作系统需要 使用Socket,还有一个新名词MQ(Message queue).

这里只做 fifo 演示, 将本程序改为 Socket 方案,或者直接集成成熟的 MQ 也是分分钟可以实现。

3. Mysql plugin

我开发了几个 UDF, 共4个 function

UDF

fifo_create(pipename)

创建管道.成功返回true,失败返回flase.

fifo_remove(pipename)

删除管道.成功返回true,失败返回flase.

fifo_read(pipename)

读操作.

fifo_write(pipename,message)

写操作 pipename管道名,message消息正文.

有了上面的function后你就可以在begin,commit,rollback 直接穿插使用,实现在事物处理期间做你爱做的事。也可以用在触发器与EVENT定时任务中。

4. plugin 的开发与使用

编译UDF你需要安装下面的软件包

sudo apt-get install pkg-config
sudo apt-get install libmysqlclient-dev
sudo apt-get install gcc gcc-c++ make automake autoconf		

https://github.com/netkiller/mysql-fifo-plugin

编译udf,最后将so文件复制到 /usr/lib/mysql/plugin/

git clone https://github.com/netkiller/mysql-image-plugin.git
cd mysql-image-plugin
gcc -O3  -g  -I/usr/include/mysql -I/usr/include  -fPIC -lm -lz -shared -o fifo.so fifo.c
sudo mv fifo.so /usr/lib/mysql/plugin/		

装载

create function fifo_create returns string soname 'fifo.so';
create function fifo_remove returns string soname 'fifo.so';
create function fifo_read returns string soname 'fifo.so';
create function fifo_write returns string soname 'fifo.so';		

卸载

drop function fifo_create;
drop function fifo_remove;
drop function fifo_read;
drop function fifo_write;		

http://netkiller.github.io/journal/mysql.plugin.fifo.html

展开阅读全文

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/05/29 18:29

同步fifo与异步fifo

参考以下帖子: https://blog.csdn.net/hengzo/article/details/49683707 https://blog.csdn.net/Times_poem/article/details/51917648 https://www.cnblogs.com/aslmer/p/6114216.html https://www.cnblogs.com/ylsm-kb/p/9068449.html https://blog.csdn.net/Pieces_thinking/article/details/78026326 1.定义   FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址...

0
0
发表了博客
2020/11/25 12:00

FIFO

FIFO的基本知识与设计实现 最近在学习FPGA的FIFO,现在将最近的FIFO学习情况做一个小结: 首先从几个问题来引入FIFO的概念吧 1) FIFO是什么? 答:FIFO的英文是First in First out,也就是先进先出,即先进入FIFO的数据也最先被读出,一般作为数据传输的缓冲器。他与普通的RAM和ROM的区别在于FIFO不用给定读写的地址,在进行读写操作的过程当中是顺序进行的,不需要给定地址线。 2) FIFO的作用是? a)FIFO的作用主要是在进行...

0
0
发表了博客
2020/12/29 10:46

MySQL Clone Plugin

文章目录 一、clone插件介绍 二、安装克隆插件 三、克隆数据 3.1 克隆本地数据 3.2 克隆远程数据 3.3 基于clone建立复制 四、clone运维相关 4.1 相关文件 4.2 故障处理 4.3 clone监控 4.4 clone插件限制 一、clone插件介绍   MySQL 从8.0.17开始支持克隆插件,允许在本地或远程 MySQL 实例在线克隆数据。克隆数据是存储在 InnoDB 其中的数据的物理快照,其中包括库、表、表空间和数据字典元数据。克隆的数据包含一个功能齐全的...

0
0
发表了博客
2014/07/18 15:07

FIFO

Pipes have no names, and their biggest disadvantage is that they can be used only between processes that have a parent process in common. Two unrelated processes can- not create a pipe between them and use it for IPC FIFO stands for first in, first out, and a Unix FIFO is similar to a pipe. It is a one-way (half-duplex) flow of data. But unlike pipes, a FIFO has a pathname associated with it, a...

0
2
发表了博客
2011/09/14 22:50

FIFO

FIFO(first in, first out)。每个fifo与路径名有关,从而允许无亲缘关系的进程访问同一个FIFO。 #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 注意: mkfifo已经已经隐含指定O_CREAT | O_EXCL,这就会导致要么创建一个新的fifo文件,要么就会返回一个EEXIT错误。 FIFO不能打开来既是读也是写,因为它是半双工的。 read总是从开头开始读,write总是往末尾写。 如果用了lseek...

0
0
发表了博客
2019/07/31 19:54

FIFO

                   FIFO 在数据结构中,有一项内容叫队列。它是先进先出的一种结构,在操作系统中普遍使用并形成了消息队列这样强大的功能,对于有些信息,CPU没办法及时处理,就可以通过队列来做为缓存。这里要说的是它最基本的结构——先进先出。用过STM32的人会发现,在硬件上有一个叫FIFO的数据缓冲区,其实就是个队列,只不过它是硬件上处理的,不需要CPU处理。而很多单片机并没有硬件FIFO资源,那我们...

0
0
发表了博客
2019/04/19 21:19

fifo

[toc] 命名管道 FIFO常被称为命名管道, 以区分管道(pipe). 管道(pipe)只能用于"有血缘关系"的进程间. 但通过FIFO, 不相关的进程也能交换数据 FIFO是linux基础文件类型中的一种. 但FIFO文件在磁盘上没有数据块, 仅仅用来标识内核中一条通道. 各个进程可以打开这个文件进程read/write, 实际上是在读写内核通道, 这样就实现了进程间的通信 特点   有名管道   在磁盘上有这样一个文件   伪文件, 在磁盘上大学为0   在内核中...

0
0
发表于硬件 & IoT专区
2017/11/02 08:56

Verilog 描述FIFO以及FIFO的使用

“ 我上课说过,数据结构课程学习到的各种数据结构其实都是可以用Verilog hdl语言来描述并实现的。而FIFO就是其中最具代表性的一种数据结构。FIFO在FPGA或ASIC设计中有多种用途,主要应用于跨时钟域、数据缓冲、总线宽度转换、生产者-消费者模块间的接口等。” 上图是连接到以太网适配器的PCI Express 卡中使用的FIFO。该FIFO在不同时钟频率和数据路径宽度的模块之间进行数据缓冲。 01 — FIFO简介 1、FIFO简介 FIFO是英文First...

0
0
发表于服务端专区
2020/03/15 10:10

聊聊skywalking的mysql-plugin

## 序 本文主要研究一下skywalking的mysql-plugin ## skywalking-plugin.def skywalking-6.6.0/apm-sniffer/apm-sdk-plugin/mysql-8.x-plugin/src/main/resources/skywalking-plugin.def ``` mysql-8.x=org.apache.skywalking.apm.plugin.jdbc.mysql.v8.define.ConnectionImplCreateInstrumentation mysql-8.x=org.apache.skywalking.apm.plugin.jdbc.mysql.v8.define.ConnectionInstrumentation mysql-8.x=org.apache.skywalki...

0
0
发表了博客
2018/08/05 16:46

mysql user password plugin

caching_sha2_password caching_sha2_password caching_sha2_password caching_sha2_password caching_sha2_password mysql_native_password D:/webCodeOnline/src/vendor/github.com/go-sql-driver/mysql/errors.go:4 // Go MySQL Driver - A MySQL-Driver for Go's database/sql package // // Copyright 2013 The Go-MySQL-Driver Authors. All rights reserved. // // This Source Code Form is subject to the terms o...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
13 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部