初始化一个存储引擎实现起来非常简单,因为MySQL已经为我们准备了一个十分好用的模板example引擎。
在源码的storage/example
目录下,我们可以发现该引擎,官方建议我们基于这个模板引擎去创建我们自己的存储引擎,确实,有了这个,我们可以很快速地出事化一个我们自定义的存储引擎。
1. 同样在storage目录下,复制一份example的源码,命名为tianma,此时该目录下有三个文件:ha_example.cc/ha_example.h/CMakeList.txt
2. 修改其中的ha_example.cc->ha_tianma.cc/ha_example.h->ha_tianma.h
3. 利用vim或sed将文件中的example替换成tianma,注意example的大小写。
4. 在sql/handler.h中的枚举legacy_db_type中加入新添加的DB_TYPE_TIANMA,注意,这个类型一定要放在DB_TYPE_DEFAULT之前。
完成上述代码修改之后,我们就可以进行代码的编译工作了,注意打开编译选项WITH_TIANMA_STORAGE_ENGINE=1,具体可见源码目录下的compile.sh脚本。这样MySQL就会自动加载tianma引擎。
一段时间的等待之后,代码编译通过,对MySQL进行初始化和启动(该过程可以参考官网)……
通过MySQL client登录,进入熟悉的MySQL交互界面,可以验证tianma引擎有没有被正确加载:
MySQL [(none)]> show engines\G
*************************** 1. row ***************************
Engine: TIANMA
Support: YES
Comment: Tianma storage engine
Transactions: NO
XA: NO
Savepoints: NO
……
可以看到存储引擎已经被正确加载。
再看一下能否正常建表
MySQL [test]> create table t(a int, b int)engine=TIANMA;
Query OK, 0 rows affected (0.09 sec)
MySQL [test]> show create table t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL
) ENGINE=TIANMA DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
我们发现可以正常创建指定存储引擎为TIANMA的表。
再看一下能否正常drop表
MySQL [test]> drop table t;
Query OK, 0 rows affected (0.10 sec)
功能也正常。
至此,我们可以证明TIANMA引擎可以进行初始化,也可以进行正常的建表,删表,创建存储引擎的第一步已经实现了。
具体代码可参考这里
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。