MySQL自帶了很多插件藻糖,比如半同步插件茫孔、審計插件叮喳、密碼驗證插件等等,甚至MySQL存儲引擎也是以插件方式實現的缰贝。MySQL開放的插件接口馍悟,為開發(fā)者開發(fā)自定義插件提供了便利。本文將介紹如何快速開發(fā)一個自定義的MySQL插件剩晴。
原文地址:
https://mytecdb.com/blogDetail.php?id=92
一锣咒、開發(fā)環(huán)境準備
- 下載MySQL源碼侵状,本文使用的源碼是 Percona Server for MySQL 5.7.19。
- 安裝C/C++開發(fā)環(huán)境毅整、依賴包等趣兄。
- 編譯MySQL源碼,保證在開發(fā)自定義插件前悼嫉,MySQL源碼能夠被正常編譯艇潭。
二、自定義插件my_plugin
MySQL源碼中包含了插件開發(fā)的例子戏蔑,在源碼目錄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為基礎辛臊,開發(fā)自定義插件仙粱。拷貝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有點區(qū)別刃唤,我們修改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二進制程序初始化數據庫允青,啟動數據庫,連接到數據庫卵沉,執(zhí)行安裝和卸載插件的命令颠锉,如下:
- 安裝:INSTALL PLUGIN my_plugin SONAME 'my_plugin.so';
- 卸載:UNINSTALL PLUGIN my_plugin;
mysql.plugin 表記錄了已經安裝的插件,通過執(zhí)行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的執(zhí)行次數,最低執(zhí)行時間腊满,最高執(zhí)行時間等等套么。當然這些需要對MySQL源碼進一步熟悉的基礎上,才能進行更強大功能的開發(fā)碳蛋。