MySQL自带了很多插件,比如半同步插件、审计插件、密码验证插件等等,甚至MySQL存储引擎也是以插件方式实现的。MySQL开放的插件接口,为开发者开发自定义插件提供了便利。本文将介绍如何快速开发一个自定义的MySQL插件。

一、开发环境准备

下载MySQL源码,本文使用的源码是 Percona Server for MySQL 5.7.19。

安装C/C++开发环境、依赖包等。

编译MySQL源码,保证在开发自定义插件前,MySQL源码能够被正常编译。

二、自定义插件my_plugin

MySQL源码中包含了插件开发的例子,在源码目录plugin/daemon_example,该例子实现的是每隔5秒向数据目录的mysql-heartbeat.log文件中写入心跳时间戳,如下:

Starting up at 190809 2:30:26

Heartbeat at 190809 2:30:31

Heartbeat at 190809 2:30:36

Heartbeat at 190809 2:30:41

Heartbeat at 190809 2:30:36

Heartbeat at 190809 2:30:51

Shutting down at 190809 2:30:53

以daemon_example为基础,开发自定义插件。拷贝daemon_example目录改名为my_plugin,依次修改my_plugin目录下的文件,把daemon_example修改为my_plugin。

my_plugin/CMakeLists.txt

my_plugin/my_plugin.cc(daemon_example.cc修改为my_plugin.cc)

my_plugin/my_plugin.ini(daemon_example.ini修改为my_plugin.ini)

为了与daemon_example有点区别,我们修改my_plugin.cc文件,主要修改点如下:

1. mysql_declare_plugin,修改插件名称,作者。

2. mysql-heartbeat.log 日志名称修改为 my_plugin.log。

3. 心跳间隔时间由5秒调整为60秒。

三、编译自定义插件

按照步骤一编译MySQL源码的方式,再次编译一次。编译成功的话,会在plugin/my_plugin生成插件my_plugin.so

四、安装及卸载自定义插件

使用编译好的MySQL二进制程序初始化数据库,启动数据库,连接到数据库,执行安装和卸载插件的命令,如下:

安装:INSTALL PLUGIN my_plugin SONAME 'my_plugin.so';

卸载:UNINSTALL PLUGIN my_plugin;

mysql.plugin 表记录了已经安装的插件,通过执行SQL:select * from mysql.plugin; 来获取已安装的插件。

mysql.plugin系统表记录的插件必须是通过install plugin语句来安装的,通过 --plugin-load方式安装的插件,不会记录到mysql.plugin表中。

在数据目录,可以查看心跳日志文件my_plugin.log是否存在,里面的心跳日志,是否每隔60秒打印一次,如下:

Starting up at 190809 4:07:52

Heartbeat at 190809 4:08:52

Heartbeat at 190809 4:09:52

Heartbeat at 190809 4:10:52

Heartbeat at 190809 4:11:52

Heartbeat at 190809 4:12:52

Shutting down at 190809 4:12:55

五、扩展插件功能

my_plugin插件虽然只是一个没有任何实际功能的MySQL插件,但是可以在此基础上,添加更多的实用功能,比如记录每个SQL的执行次数,最低执行时间,最高执行时间等等。当然这些需要对MySQL源码进一步熟悉的基础上,才能进行更强大功能的开发。

如何添加MySQL插件_如何开发一个自定义的MySQL插件相关推荐

  1. 如何做一个mysql数据库_如何创建一个简单的mysql数据库

    这篇文章主要介绍了操作MySQL日志的一些方法,对日志的删除操作做了重点讲解,需要的朋友可以参考下. 一.创建数据库 注:已经安装好mysql. windows下运行cmd进入命令窗口,本人用的是wi ...

  2. JAVA 多线程 JAVA 如何开发一个自定义线程池

    1.多线程设计介绍 每一个线程的启动和结束都是比较消耗时间和占用资源的. 如果在系统中用到了很多的线程,大量的启动和结束动作会导致系统的性能变卡,响应变慢. 为了解决这个问题,引入线程池这种设计思想. ...

  3. mysql独立开发_独立开发一个 App 是一种怎样的体验?

    我要回答一下这样孤单的问题.哈哈哈. 我做过2个已经上线的APP. 第一个<仅仅电影>(已经下线了): 那时候年轻,想做一个独立的电影影单类的APP,推荐很多好看电影.然后想法立了就开始做 ...

  4. flutter 获取定位_从头开发一个Flutter插件(二)高德地图定位插件

    在上一篇文章从头开发一个Flutter插件(一)开发流程里具体介绍了flutter插件的具体开发流程,从创建项目到发布.接下来将会为Flutter天气项目开发一个基于高德定位sdk的flutter定位 ...

  5. 从头开发一个BurpSuite数据收集插件

    一段时间没写公众号了,最近写了个 burpsuite 数据收集的插件,于是想出一篇从头编写一个 burpsuite 插件的教程. ​ 这个插件的目的收集 burpsuite 请求中的数据,如请求中的子 ...

  6. vscode里面如何配置库_怎么为vscode添加库文件_编程开发工具

    vscode怎么运行出结果_编程开发工具 vscode运行出结果的方法:首先打开vscode软件:然后在vscode插件中搜索"Code Runner"进行安装:接着用鼠标进行右键 ...

  7. ubuntu mysql 驱动_怎么在Ubuntu下为MySQL添加ODBC驱动?

    学过Web开发的人应该都知道ODBC,这个微软自创的数据库连接方法使得在Windows下让程序连接数据库非常容易,比如Java的ODBC连接MSSQL.Access等等.如果要开发一个跨平台跨数据库的 ...

  8. 所谓 jQuery 插件,怎样开发一个 jQuery 插件

    简单来说,所谓 jQuery 插件就是扩展在 jQuery 原型对象上的一个方法.通过扩展 jQuery 对象,每次调用 jQuery 对象的时候,对象里面都包含了我们自己所添加的那个方法. 一般插件 ...

  9. 构建maven项目插件_如何构建一个Maven插件

    构建maven项目插件 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. 由于其插件生态系统的普 ...

最新文章

  1. Linux/Unix中的重定向简单实例
  2. css标签显示特性(块级元素、行内元素、行内块元素、标签显示模式转换display、简单文字居中、简单导航栏案例)
  3. Android开发之通过Handler的post方法更新UI
  4. 2015.12.11-2015.12.13 金华旅程的学习计划
  5. 零基础自学Java变成能成吗?前景如何
  6. 代码编辑器揭露性格,你是哪一种?
  7. Bootstrap固定导航条
  8. @Html.ActionLink方法
  9. 支持异步通知的globalfifo平台设备驱动程序及其测试代码
  10. Java Map在遍历过程中删除元素
  11. 使IE6支持png透明图片
  12. 安装CentOS步骤
  13. Linux误删C基本运行库libc.so.6处理方法
  14. 深度学习之LSTM完全图解
  15. 搜狗实验室新闻数据文本分类深度学习案例 ———Tensorflow+CNN深度学习全流程(上)
  16. 星际开图挂_《星际争霸2》牛x强力高端职业玩家手把手教你识别开图挂
  17. matlab改变图片尺寸及像素与尺寸的转换
  18. 学小易有微型计算机接口答案吗,学小易接口更新+新的接口+成品
  19. 苹果内购IAP服务端验证-java篇
  20. 字体转换 (代码整理 备忘)

热门文章

  1. python 读取发票内容,在窗口中显示并保存到excel文件中
  2. 【无标题】1111111111111
  3. LinkedIn资深数据科学家黄申:人工智能不会一夜之间改变人们的生活
  4. BZOJ 4479: [Jsoi2013]吃货jyy
  5. tpx色卡电子版_潘通色卡电子版Pantone TPX(三)
  6. vue使用element-ui上传多张图片及回显
  7. VScode 检测到#include 错误,请更新includepath。已为此翻译单元 禁用波形曲线(超详细讲解,绝对不亏)
  8. linux下通过fdisk和mkfs.ext4给TF卡建立分区
  9. 自己封装的Socket类-Socket_Zmy
  10. 函数三个重要组成部分