MySQL-fifo-Plugin

进程间通信解决方案
授权协议 BSD
开发语言 C/C++
所属分类 数据库相关、 数据库调整和优化
软件类型 开源软件
地区 国产
投 递 者 池赞
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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

  • /* Homepage: http://netkiller.github.io/ Author: netkiller */ #include #include #include #include #include #include #include #include #include "fifo.h" /* ------------------------ fifo_create --------

  • 19.5.3. MySQL fifo mysql-fifo-plugin MySQL Pipes (FIFOs) Plugin Build cd /usr/local/src/ git clone https://github.com/netkiller/mysql-fifo-plugin.git cd mysql-fifo-plugin/ cmake . make make install or

  • 1.5.1. validate_password 插件的卸载与安装 uninstall plugin validate_password; INSTALL PLUGIN validate_password SONAME 'validate_password.so'; 查看变量设置 mysql> SHOW VARIABLES LIKE 'validate_password%'; +---------

  • 19.5.1. validate_password 插件的卸载与安装 uninstall plugin validate_password; INSTALL PLUGIN validate_password SONAME 'validate_password.so'; 查看变量设置 mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------

  • MySQL分配缓冲区和高速缓存以提高数据库操作的性能。默认配置旨在允许MySQL服务器在具有大约512MB RAM的虚拟机上启动。您可以通过增加某些与缓存和缓冲区相关的系统变量的值来提高MySQL性能。您还可以修改默认配置,以在内存有限的系统上运行MySQL。 下面的列表描述了MySQL使用内存的一些方式。如果适用,将引用相关的系统变量。有些项目是存储引擎或特定于功能的。 所述InnoDB缓冲器池

  • 备注:测试数据库版本为MySQL 8.0 一. MySQL如何使用内存 MySQL分配缓冲区和缓存来提高数据库操作的性能。默认配置被设计为允许MySQL服务器在拥有大约512MB内存的虚拟机上启动。您可以通过增加某些缓存和缓冲区相关的系统变量的值来提高MySQL的性能。您还可以修改默认配置,以便在内存有限的系统上运行MySQL。 下面的列表描述了MySQL使用内存的一些方式。在适用的情况下,引用了

  • 1.1. MySQL Installation http://downloads.mysql.com/archives.php 1.1.1. Installation by apt-get under debian/ubuntu 安装环境 ubuntu 8.10 sudo apt-get install mysql-server New password for the MySQL "root"

  • 前面已经提到了mysql主从环境下数据一致性检查:mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理 今天这里再介绍另一种Mysql数据一致性自动检测工具:Maatkit。(不过Maatkit工具现在已经不维护了,推荐还是使用percona-toolkit工具吧!) Maatkit是一个开源的工具包,为mySQL日常管理提供了帮助,它包含很多工具,这里

  • 前面已经提到了mysql主从环境下数据一致性检查:mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理 今天这里再介绍另一种Mysql数据一致性自动检测工具:Maatkit。(不过Maatkit工具现在已经不维护了,推荐还是使用percona-toolkit工具吧!) Maatkit是一个开源的工具包,为mySQL日常管理提供了帮助,它包含很多工具,这里

  • Percona-Toolkits Percona-toolkit 简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索引 对服务器信息进行汇总 分析来自日志和tcpdump的查询 当系统出问题的时候收集重要的系统信息 根据工具类型

  • 主备 启动slave thread:登录到sql后运行start slave; 查看主备:show slave status\G 主备切换 发生切换的原因是ha在固定时间内来测试数据库能否访问,如果数据库在多长时间内一直不能访问才会发生主备切换 所以主备切换的原因是一定时间内数据库无法访问,原因可能有qps过大或慢sql rt过高导致数据库堵住,或线程池满数据库无法访问,连接满拒绝访问 数据 1.

  • InnoDB缓冲池是一个内存区域,用于保存InnoDB表、索引和其他辅助缓冲区的缓存数据 。为了提高大容量读取操作的效率,缓冲池被划分为 可能包含多行的页面。为了缓存管理的效率,缓冲池被实现为页链表;使用LRU算法的变体,很少使用的数据会从缓存中老化 。 缓冲池的大小对系统性能很重要: 系统 innodb_buffer_pool_size 变量定义缓冲池大小。通常,推荐 innodb_buffer

  • BUILD 这个目录在本系列的上篇文章中我们仔细看过,内含各种平台的编译脚本,这里就不仔细说了。 client 这个目录下有如下比较让人眼熟的文件: mysql.cc, mysqlcheck.c, mysqladmin.cc, mysqlshow.c,等等,如果你编译一下就会发现那些眼熟的程序也出现了,比如mysql。明白了吧,这个目录就是那些客户端程序所在的目录。这个 目录的内容也比较少,而且也

 相关资料
  • 本文向大家介绍Linux 进程通信之FIFO的实现,包括了Linux 进程通信之FIFO的实现的使用技巧和注意事项,需要的朋友参考一下 FIFO通信(first in first out) FIFO 有名管道,实现无血缘关系进程通信。 创建一个管道的伪文件 a.mkfifo testfifo 命令创建 b.也可以使用函数int mkfifo(const char *pathname, mode_t

  • 进程间通信 IPC全称Interprocess Communication,指进程间协作的各种方法,当然包括共享内存,信号量或Socket等。 管道(Pipe) 管道是进程间通信最简单的方式,任何进程的标准输出都可以作为其他进程的输入。 信号(Signal) 下面马上会介绍。 消息队列(Message) 和传统消息队列类似,但是在内核实现的。 共享内存(Shared Memory) 后面也会有更详

  • 问题内容: Java上下文中的线程和进程之间有什么区别?用Java如何实现进程间通信和线程间通信?请给我指出一些现实生活中的例子。 问题答案: 根本的区别是线程位于相同的地址空间中,而进程位于不同的地址空间中。这意味着线程间通信是关于传递对对象的引用以及更改共享对象,而进程是关于传递对象的序列化副本。 在实践中,Java线程间通信可以实现为对共享对象进行简单的Java方法调用,并引入适当的同步。或

  • 管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。 信号(Signal):信号是比较复杂的通信方式,用于通知接受进

  • 一、使用 Intent Activity,Service,Receiver 都支持在 Intent 中传递 Bundle 数据,而 Bundle 实现了 Parcelable 接口,可以在不同的进程间进行传输。 在一个进程中启动了另一个进程的 Activity,Service 和 Receiver ,可以在 Bundle 中附加要传递的数据通过 Intent 发送出去。 二、使用文件共享 Wind

  • 问题内容: 我正在用Go编写负载平衡的服务器系统。 负载平衡服务器将与多个应用程序服务器通信并处理请求。这些服务器都可以在同一台计算机或网络上运行。 我已经找到了网络,但是现在我需要找到一种最佳的方式来使负载均衡器与本地应用程序服务器进行通信。使用-networking似乎并非最佳选择。 我正在尝试通过和系统调用共享内存,但是没有找到任何有效的示例,并且该软件包也完全没有文档说明。 有人可以为我提