使用go-mysql-server 开发自己的mysql server

go-mysql-server是一个golang 的mysql server 协议实现包,使用此工具我们可以用来做好多方便的东西

  • 基于mysql 协议暴露自己的本地文件为sql 查询
  • 基于mysql 协议灵活的暴露rest 服务的接口查询为sql
  • 基于mysql 协议方便对于一些数据的查询分析
  • 基于mysql 协议暴露k8s 资源为sql 查询(类似fuse 文件系统?)
  • 基于mysql 协议查询git仓库代码
    。。。

一个简单的demo

一个golang 版的简单mysql server

  • 项目初始化(go mod )
go mod init github.com/rongfengliang/my-mysqlserver
  • main.go
package main

import (
 "time"

 "gopkg.in/src-d/go-mysql-server.v0"
 "gopkg.in/src-d/go-mysql-server.v0/auth"
 "gopkg.in/src-d/go-mysql-server.v0/mem"
 "gopkg.in/src-d/go-mysql-server.v0/server"
 "gopkg.in/src-d/go-mysql-server.v0/sql"
)

// Example of how to implement a MySQL server based on a Engine:
//
// ```
// > mysql --host=127.0.0.1 --port=5123 -u user -ppass db -e "SELECT * FROM mytable"
// +----------+-------------------+-------------------------------+---------------------+
// | name | email | phone_numbers | created_at |
// +----------+-------------------+-------------------------------+---------------------+
// | John Doe | [email protected] | ["555-555-555"] | 2018-04-18 09:41:13 |
// | John Doe | [email protected] | [] | 2018-04-18 09:41:13 |
// | Jane Doe | [email protected] | [] | 2018-04-18 09:41:13 |
// | Evil Bob | [email protected] | ["555-666-555","666-666-666"] | 2018-04-18 09:41:13 |
// +----------+-------------------+-------------------------------+---------------------+
// ```
func main() {
 engine := sqle.NewDefault()
 engine.AddDatabase(createTestDatabase())
 engine.AddDatabase(sql.NewInformationSchemaDatabase(engine.Catalog))

 config := server.Config{
  Protocol: "tcp",
  Address: "localhost:3306",
  Auth: auth.NewNativeSingle("root", "", auth.AllPermissions),
 }

 s, err := server.NewDefaultServer(config, engine)
 if err != nil {
  panic(err)
 }

 s.Start()
}

func createTestDatabase() *mem.Database {
 const (
  dbName = "mydb"
  tableName = "mytable"
 )

 db := mem.NewDatabase(dbName)
 table := mem.NewTable(tableName, sql.Schema{
  {Name: "name", Type: sql.Text, Nullable: false, Source: tableName},
  {Name: "email", Type: sql.Text, Nullable: false, Source: tableName},
  {Name: "phone_numbers", Type: sql.JSON, Nullable: false, Source: tableName},
  {Name: "created_at", Type: sql.Timestamp, Nullable: false, Source: tableName},
 })

 db.AddTable(tableName, table)
 ctx := sql.NewEmptyContext()
 table.Insert(ctx, sql.NewRow("John Doe", "[email protected]", []string{"555-555-555"}, time.Now()))
 table.Insert(ctx, sql.NewRow("John Doe", "[email protected]", []string{}, time.Now()))
 table.Insert(ctx, sql.NewRow("Jane Doe", "[email protected]", []string{}, time.Now()))
 table.Insert(ctx, sql.NewRow("Evil Bob", "[email protected]", []string{"555-666-555", "666-666-666"}, time.Now()))
 return db
}
  • 添加依赖
go mod tidy
  • 构建
go build my-server
  • 运行
./my-server
  • 连接查询
mysql -uroot -h127.0.0.1

效果

select * from mytable;
+----------+-------------------+-------------------------------+---------------------+
| name | email | phone_numbers | created_at |
+----------+-------------------+-------------------------------+---------------------+
| John Doe | [email protected] | ["555-555-555"] | 2019-05-18 10:56:31 |
| John Doe | [email protected] | [] | 2019-05-18 10:56:31 |
| Jane Doe | [email protected] | [] | 2019-05-18 10:56:31 |
| Evil Bob | [email protected] | ["555-666-555","666-666-666"] | 2019-05-18 10:56:31 |

说明

go-mysql-server 已经包好了好多内置的sql 函,同时我们也可以自己搞一些扩展开发,一个很强大的工具

参考资料

https://github.com/src-d/go-mysql-server

原文地址:https://www.cnblogs.com/rongfengliang/p/10886794.html

时间: 2024-08-06 01:33:33

使用go-mysql-server 开发自己的mysql server的相关文章

MySQL数据库开发学习教程

MySQL数据库开发学习教程 一.数据库设计 数据库设计(一)--数据库设计http://blog.51cto.com/9291927/2087925 二.MySQL数据库开发基础教程 MySQL数据库开发基础教程目录如下: MySQL数据库基础(一)--MySQL数据库简介http://blog.51cto.com/9291927/2087947MySQL数据库基础(二)--MySQL字符集与乱码解析http://blog.51cto.com/9291927/2088254MySQL数据库基础

SQL Server 、 Oracle 以及 MySQL 有哪些区别?

SQL,在这里我理解成SQL Server.三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相似,就不赘述了. 如果要说明三者的区别,首先就要从历史入手. Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十几家公司,老婆也离他而去.开始创业时只有1200美元,却使得Oracle公司连

报表开发工具中mysql数据库连接编码转化失效解决方案

1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方案 2.1 检查系统的默认字体 例如查看windows下C/window/fonts的字体样式,如下图: 如果没有以上字体,百度一下缺少字体自行安装,安装之后,已经包含以上的字体如果还是出现问题,则需要参看及修改MySQL字符集. 2.2 参看及修改MySQL字符集 · 查看MySql字符集 MyS

windows下搭建Apache+Mysql+PHP开发环境

原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2;MySQL Server 5.5php-5.3 下载地址 环境下载 官方下载地址 Apache MySql PHP 至于我使用的版本已经上传到百度云提供大家下载了,这里就不多啰嗦了!! Apache Apache的安装和普通的应用程序安装没什么太大的区别,关键是配置.打开安装路径下的"conf\httpd.conf"文

mac 安装mysql 报错“ERROR 2002 (HY000): Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2)” 解决办法

首先安装 homebrew 再 brew install mysql 之后连接 mysql 无论是登录还是修改初始密码都会报如下的错误 ERROR 2002 (HY000): Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) 运行如下解决:参考 http://www.thinksaas.cn/group/topic/347978/ unset TMPDIR mysql_install_db --v

SQL Server数据迁移至MySQL

背景: 我所在公司的官网使用了PHP进行重新开发,抛弃了原有.net开发环境,但需要使用到老官网的一些数据,所以需要进行数据迁移. 环境如下: 老官网:Windows Server 2008 R2, SQL Server 2008 R2 新官网:RedHat 6.5,MySQL,PHP... ====================我是分割线========================= 目前网络上有很多软件声称是可以进行SQL Server-> My SQL的数据迁移,比如OBDB2DB,

linux下apache+mysql+php开发环境纯源代码编译搭建

linux下apache+mysql+php开发环境纯源代码编译搭建 记录一下我在fedora core 1下通过源代码编译出来的apache+mysql+php开发环境的全部过程 通常安装一台服务器当然使用rpm是最方便的,不需要考虑太多配置的问题,就可以轻松获得需要的环境了.不过rpm包互相关联的问题也不是这么容易解决. apache,mysql,php这三个应用从源代码编译安装还是比较简单的,配置参数不算复杂,而且没有太多的依赖关系,从源码编译出来的系统也比较稳定一些,方便未来打补丁和升级

[Openwrt 项目开发笔记]:MySQL配置(六)

在本人的项目中,运行在路由器上的服务器采用Nginx+MySQL+PHP 架构.通常较为常见的web框架为Lamp(Linux+Apache+Mysql+PHP),为何我们选择LNMP呢?我将在后续的几篇文章中给出答案. 首先我们来介绍如何在Openwrt上搭建MySQL数据库. 参考文章:(http://blog.csdn.net/yufei_email/article/details/21845935) 一.安装MySQL数据库(在backfire10.3版本中,package已经包含mys

搭建PHP开发环境 apache+MySQL+PHP 安装phpMyAdmin模块

该博文参考的资料来源于: http://wenku.baidu.com/view/0e4c569ddd3383c4bb4cd267.html http://www.cnblogs.com/pharen/archive/2012/02/06/2340628.html http://www.admin10000.com/document/54.html http://blog.csdn.net/zutsoft/article/details/21651041 昨天花了差不多一天的时间,跳过无数“坑”

Java连接MySQL Warning: Establishing SSL connection without server's identity verification is not recommended

1. 数据库 1.1 创建表 在当前数据库students中,创建数据表student: 1 mysql> create table student( 2 -> studentid char(10),#学生ID 3 -> name varchar(10),#学生姓名 4 -> age smallint,#学生年龄 5 -> grade smallint)#成绩 6 -> ; 1.2 插入信息: INSERT student VALUES("1*********