如何開發(fā)一個(gè)自定義的MySQL插件

MySQL自帶了很多插件,比如半同步插件、審計(jì)插件、密碼驗(yàn)證插件等等,甚至MySQL存儲(chǔ)引擎也是以插件方式實(shí)現(xiàn)的。MySQL開放的插件接口,為開發(fā)者開發(fā)自定義插件提供了便利。本文將介紹如何快速開發(fā)一個(gè)自定義的MySQL插件。

原文地址:
https://mytecdb.com/blogDetail.php?id=92

一、開發(fā)環(huán)境準(zhǔn)備

  1. 下載MySQL源碼,本文使用的源碼是 Percona Server for MySQL 5.7.19。
  2. 安裝C/C++開發(fā)環(huán)境、依賴包等。
  3. 編譯MySQL源碼,保證在開發(fā)自定義插件前,MySQL源碼能夠被正常編譯。

二、自定義插件my_plugin

MySQL源碼中包含了插件開發(fā)的例子,在源碼目錄plugin/daemon_example,該例子實(shí)現(xiàn)的是每隔5秒向數(shù)據(jù)目錄的mysql-heartbeat.log文件中寫入心跳時(shí)間戳,如下:

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為基礎(chǔ),開發(fā)自定義插件??截恉aemon_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有點(diǎn)區(qū)別,我們修改my_plugin.cc文件,主要修改點(diǎn)如下:
1. mysql_declare_plugin,修改插件名稱,作者。
2. mysql-heartbeat.log 日志名稱修改為 my_plugin.log。
3. 心跳間隔時(shí)間由5秒調(diào)整為60秒。

三、編譯自定義插件

按照步驟一編譯MySQL源碼的方式,再次編譯一次。編譯成功的話,會(huì)在plugin/my_plugin生成插件my_plugin.so

四、安裝及卸載自定義插件

使用編譯好的MySQL二進(jìn)制程序初始化數(shù)據(jù)庫,啟動(dòng)數(shù)據(jù)庫,連接到數(shù)據(jù)庫,執(zhí)行安裝和卸載插件的命令,如下:

  • 安裝:INSTALL PLUGIN my_plugin SONAME 'my_plugin.so';
  • 卸載:UNINSTALL PLUGIN my_plugin;

mysql.plugin 表記錄了已經(jīng)安裝的插件,通過執(zhí)行SQL:select * from mysql.plugin; 來獲取已安裝的插件。
mysql.plugin系統(tǒng)表記錄的插件必須是通過install plugin語句來安裝的,通過 --plugin-load方式安裝的插件,不會(huì)記錄到mysql.plugin表中。

在數(shù)據(jù)目錄,可以查看心跳日志文件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

五、擴(kuò)展插件功能

my_plugin插件雖然只是一個(gè)沒有任何實(shí)際功能的MySQL插件,但是可以在此基礎(chǔ)上,添加更多的實(shí)用功能,比如記錄每個(gè)SQL的執(zhí)行次數(shù),最低執(zhí)行時(shí)間,最高執(zhí)行時(shí)間等等。當(dāng)然這些需要對(duì)MySQL源碼進(jìn)一步熟悉的基礎(chǔ)上,才能進(jìn)行更強(qiáng)大功能的開發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容