首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >动手创建自己的存储引擎(一)

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

原创
作者头像
devsql
发布于 2020-01-04 13:56:08
发布于 2020-01-04 13:56:08
1.3K00
代码可运行
举报
文章被收录于专栏:MySQL内核MySQL内核
运行总次数:0
代码可运行

初始化一个存储引擎实现起来非常简单,因为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
代码运行次数:0
运行
AI代码解释
复制
MySQL [(none)]> show engines\G
*************************** 1. row ***************************
      Engine: TIANMA
     Support: YES
     Comment: Tianma storage engine
Transactions: NO
          XA: NO
  Savepoints: NO

……

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

再看一下能否正常建表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
MySQL [test]> drop table t;
Query OK, 0 rows affected (0.10 sec)

功能也正常。

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


具体代码可参考这里

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于MySQL数据库InnoDB与MyIASM存储引擎
如果想要修改MySQL数据库的存储引擎,那么必须要了解这两种引擎,并且清楚的明白这两种引擎的区别。
星哥玩云
2022/08/18
1K0
第05章_存储引擎
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
1810
第05章_存储引擎
技术分享 | mysql Federated 引擎最佳实战
MySQL OCP 认证,PostgresSQL PGCA 认证,擅长 MySQL、PostgreSQL、dble 等开源数据库相关产品的备份恢复、读写分离、SQL 调优、监控运维、高可用架构设计等。目前任职于月亮小屋(中国)有限公司。
爱可生开源社区
2021/06/16
1.9K0
技术分享 | mysql Federated 引擎最佳实战
RocksDB和Innodb引擎性能PK胜负难料?
迫于线上环境存储空间的问题,最近针对Rocksdb引擎做了一些预研测试,本文主要对比MyRocks引擎和Innodb引擎以及压缩模式下的Innodb引擎的在性能方面的一些差异对比,分别从读写,只读,只写等场景下压测的结果对比;关于rocksdb引擎的介绍,本文不做详细介绍;废话不多说了,我们先看一下如何来安装rocksdb引擎;
SEian.G
2021/04/15
4.6K0
RocksDB和Innodb引擎性能PK胜负难料?
MySQL FEDERATED 引擎的简单介绍
上周研发提过来说希望对2个表做join,但是这2个表分布在不同的MySQL实例里面。
保持热爱奔赴山海
2023/07/31
4670
MySQL之CSV存储引擎的应用
今天来分享一下MySQL中支持的一种存储引擎--CSV,这种存储引擎平时工作中用得可能并不多,但是在某一些导入CSV文件的场景下,非常有用;平时我们把CSV文件导入到MySQL中,可能会考虑到使用load data的方式导入数据,下面我们介绍一种新的方式–使用CSV引擎,在CSV数据量比较大的情况下,比较好用;
SEian.G
2021/12/01
1.3K0
MySQL常见存储引擎详解
在my.cnf配置文件中设置default-storage-engine参数表示设置默认存储引擎 在MySQL的连接上设置当前连接的默认存储引擎
星哥玩云
2022/08/17
5140
MySQL常见存储引擎详解
Tokudb安装测试初探
TokuDB 是一个高性能、支持MVCC的MySQL 和 MariaDB 的存储引擎。TokuDB 的主要特点是数据压缩功能出色,对高写压力的支持,由美国TokuTek公司(http://www.tokutek.com/) 研发,该公司于2015年4月份被Percona收购,理所当然地提供了TokuDB版本的Percona Server。本文使用Peronca server 5.6.30 版本进行测试安装。
用户1278550
2018/08/09
5720
mysql-表的操作
数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎
py3study
2018/08/03
8610
从零开始学Mysql - 连接管理和存储引擎
本篇为个人mysql专栏的第二篇,第二篇将会是关于连接管理以及存储引擎的讨论,以及mysql底层的交互过程,这个概念在之前的mysql专栏中有提到过,这里再一次进行总结,在第一篇开篇的时候讨论过这个专栏的内容大多数都是参考《从根上理解Mysql》这本书,这里再次强调一遍,后续专栏文章不会再进行赘述。
阿东
2021/11/12
3740
从零开始学Mysql - 连接管理和存储引擎
开发经验|小白该如何学习MySQL存储引擎
MySQL中的存储引擎的发展历史可谓是丰富多彩,至今为止,MySQL已经有超过20年的历史,其存储引擎不断进行着演化和发展。
六月暴雪飞梨花
2023/11/15
6582
开发经验|小白该如何学习MySQL存储引擎
Mysql更换MyISAM存储引擎为Innodb的操作记录
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件。 通过下面的命令结果可知,已经安装了innodb插件。 mysql> show plugins; +------------+--------+----------------+---------+---------+ | Name | Status | Type | Library | License | +------------+--------+-----
洗尽了浮华
2018/01/23
2.4K0
MySQL 存储引擎 原
使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎非常快。
wuweixiang
2018/08/14
1.1K0
MySQL 存储引擎
                                                                            原
浅析MySQL存储引擎序列属性
墨墨导读:为了达到标识的目的,许多应用程序需要生成唯一编号,比如:商品编号、交易流水号等。MySQL数据库同样能够支持这样的需求场景,AUTO_INCREMENT就是为MySQL实现序列的方式,它会自动生成序列编号。
数据和云
2020/09/14
1.6K0
关于Memory存储引擎的知识点
Memory存储引擎在日常的工作中使用的是比较少的,但是在MySQL的某些语法中,会用到memory引擎的内存表,它有以下几个特点:
AsiaYe
2020/06/28
1.1K0
使用FREDATED引擎实现跨实例访问
    跨数据库服务器,跨实例访问是比较常见的一种访问方式,在Oracle中可以通过DB LINK的方式来实现。对于MySQL而言,有一个FEDERATED存储引擎与之相对应。同样也是通过创建一个链接方式的形式来访问远程服务器上的数据。本文简要描述了FEDERATED存储引擎,以及演示了基于FEDERATED存储引擎跨实例访问的示例。
Leshami
2018/08/13
8110
使用FREDATED引擎实现跨实例访问
MySQL进阶笔记-2(存储引擎)
最上层是一些客户端和链接服务,包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
千羽
2021/01/14
5310
MySQL进阶笔记-2(存储引擎)
MySQL下FEDERATED引擎的开启和使用
在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接的人都知道可以跨实例来进行数据查询,同样的,MySQL自带的FEDERATED引擎完美的帮我们解决了该问题。本篇文章介绍FEDERATED引擎的开启和使用。
星哥玩云
2022/08/18
3.5K0
mysql常用命令
这几天学习了一下mysql,对于mysql的命令总结如下,发现很多方面和oracle还是差别挺大的。 # mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.14-enterprise-commercial-advanced Copyright (c) 2000, 2013, Or
jeanron100
2018/03/13
1.2K0
MySQL数据库如何实现跨服务器访问数据
在使用MySQL数据库时,很多同学经常会问,我能跨服务器访问另一库的数据么?得到的答案很多时候是让人失望的。那么如果真的需要访问,又不想使用拷贝表及数据的方式,可以实现么,又该如何实现呢?
俊才
2023/11/27
1.1K0
MySQL数据库如何实现跨服务器访问数据
相关推荐
关于MySQL数据库InnoDB与MyIASM存储引擎
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验