前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动手创建自己的存储引擎(一)

动手创建自己的存储引擎(一)

原创
作者头像
devsql
发布2020-01-04 21:56:08
1.2K0
发布2020-01-04 21:56:08
举报
文章被收录于专栏:MySQL内核MySQL内核

初始化一个存储引擎实现起来非常简单,因为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引擎有没有被正确加载:

代码语言:javascript
复制
MySQL [(none)]> show engines\G
*************************** 1. row ***************************
      Engine: TIANMA
     Support: YES
     Comment: Tianma storage engine
Transactions: NO
          XA: NO
  Savepoints: NO

……

可以看到存储引擎已经被正确加载。

再看一下能否正常建表

代码语言:javascript
复制
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表

代码语言:javascript
复制
MySQL [test]> drop table t;
Query OK, 0 rows affected (0.10 sec)

功能也正常。

至此,我们可以证明TIANMA引擎可以进行初始化,也可以进行正常的建表,删表,创建存储引擎的第一步已经实现了。


具体代码可参考这里

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档