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

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

一个简单的demo

一个golang 版的简单mysql server

  • 项目初始化(go mod )
  1. go mod init github.com/rongfengliang/my-mysqlserver
  • main.go
  1. package main
  2. import (
  3. "time"
  4. "gopkg.in/src-d/go-mysql-server.v0"
  5. "gopkg.in/src-d/go-mysql-server.v0/auth"
  6. "gopkg.in/src-d/go-mysql-server.v0/mem"
  7. "gopkg.in/src-d/go-mysql-server.v0/server"
  8. "gopkg.in/src-d/go-mysql-server.v0/sql"
  9. )
  10. // Example of how to implement a MySQL server based on a Engine:
  11. //
  12. // ```
  13. // > mysql --host=127.0.0.1 --port=5123 -u user -ppass db -e "SELECT * FROM mytable"
  14. // +----------+-------------------+-------------------------------+---------------------+
  15. // | name | email | phone_numbers | created_at |
  16. // +----------+-------------------+-------------------------------+---------------------+
  17. // | John Doe | john@doe.com | ["555-555-555"] | 2018-04-18 09:41:13 |
  18. // | John Doe | johnalt@doe.com | [] | 2018-04-18 09:41:13 |
  19. // | Jane Doe | jane@doe.com | [] | 2018-04-18 09:41:13 |
  20. // | Evil Bob | evilbob@gmail.com | ["555-666-555","666-666-666"] | 2018-04-18 09:41:13 |
  21. // +----------+-------------------+-------------------------------+---------------------+
  22. // ```
  23. func main() {
  24. engine := sqle.NewDefault()
  25. engine.AddDatabase(createTestDatabase())
  26. engine.AddDatabase(sql.NewInformationSchemaDatabase(engine.Catalog))
  27. config := server.Config{
  28. Protocol: "tcp",
  29. Address: "localhost:3306",
  30. Auth: auth.NewNativeSingle("root", "", auth.AllPermissions),
  31. }
  32. s, err := server.NewDefaultServer(config, engine)
  33. if err != nil {
  34. panic(err)
  35. }
  36. s.Start()
  37. }
  38. func createTestDatabase() *mem.Database {
  39. const (
  40. dbName = "mydb"
  41. tableName = "mytable"
  42. )
  43. db := mem.NewDatabase(dbName)
  44. table := mem.NewTable(tableName, sql.Schema{
  45. {Name: "name", Type: sql.Text, Nullable: false, Source: tableName},
  46. {Name: "email", Type: sql.Text, Nullable: false, Source: tableName},
  47. {Name: "phone_numbers", Type: sql.JSON, Nullable: false, Source: tableName},
  48. {Name: "created_at", Type: sql.Timestamp, Nullable: false, Source: tableName},
  49. })
  50. db.AddTable(tableName, table)
  51. ctx := sql.NewEmptyContext()
  52. table.Insert(ctx, sql.NewRow("John Doe", "john@doe.com", []string{"555-555-555"}, time.Now()))
  53. table.Insert(ctx, sql.NewRow("John Doe", "johnalt@doe.com", []string{}, time.Now()))
  54. table.Insert(ctx, sql.NewRow("Jane Doe", "jane@doe.com", []string{}, time.Now()))
  55. table.Insert(ctx, sql.NewRow("Evil Bob", "evilbob@gmail.com", []string{"555-666-555", "666-666-666"}, time.Now()))
  56. return db
  57. }
  • 添加依赖
  1. go mod tidy
  • 构建
  1. go build my-server
  • 运行
  1. ./my-server
  • 连接查询
  1. mysql -uroot -h127.0.0.1

效果

  1. select * from mytable;
  2. +----------+-------------------+-------------------------------+---------------------+
  3. | name | email | phone_numbers | created_at |
  4. +----------+-------------------+-------------------------------+---------------------+
  5. | John Doe | john@doe.com | ["555-555-555"] | 2019-05-18 10:56:31 |
  6. | John Doe | johnalt@doe.com | [] | 2019-05-18 10:56:31 |
  7. | Jane Doe | jane@doe.com | [] | 2019-05-18 10:56:31 |
  8. | Evil Bob | evilbob@gmail.com | ["555-666-555","666-666-666"] | 2019-05-18 10:56:31 |

说明

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

参考资料

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

 
 
 
 

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

  1. 分享 koa + mysql 的开发流程,构建 node server端,一次搭建个人博客

    前言 由于一直在用 vue 写业务,为了熟悉下 react 开发模式,所以选择了 react.数据库一开始用的是 mongodb,后来换成 mysql 了,一套下来感觉 mysql 也挺好上手的.re ...

  2. Apache+MySQL+PHP开发环境的搭建(一)

    通过套件来安装和配置php开发环境. 1.所需软件:AppServ(因为是开源,任何网站都能下载) 安装本软件基本上就是下一步. 2.进行安装 选择一个盘安装该软件点击next继续: 根据自己的实际情 ...

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

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...

  4. 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 conn ...

  5. SQL Server 和 Oracle 以及 MySQL 有哪些区别?

    SQL,在这里我理解成SQL Server.三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非常相似,就不赘述了. ...

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

    该博文参考的资料来源于: http://wenku.baidu.com/view/0e4c569ddd3383c4bb4cd267.html http://www.cnblogs.com/pharen ...

  7. 微渠道发展 BAE交通运输平台和java呼声,微信mysql数据库开发实例 --图文开发教程

    持续更新 BAE java开展mysql数据库 图文教程 BAE java语言发展mysql源码下载: 目前微信的发展.BAE开展.java开展.mysql教程开发非常,的介绍基于BAE平台.java ...

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

    原文:windows下搭建Apache+Mysql+PHP开发环境 要求 必备知识 熟悉基本编程环境搭建. 运行环境 windows 7(64位); Apache2.2;MySQL Server 5. ...

  9. 数据库 --> SQL Server 和 Oracle 以及 MySQL 区别

    SQL Server 和 Oracle 以及 MySQL 区别 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Oracle的定位和架构非 ...

  10. Virtual Box虚拟机Ubuntu18.X系统安装及Mysql基本开发配置

    Linux简介 什么是 Linux? Linux:世界上不仅只有一个 Windows 操作系统,还有 Linux.mac.Unix 等操作系统.桌面操作系统下 Windows 是霸主,而 Linux ...

随机推荐

  1. 多次执行echarts时出现 there is a chart instance already initialized on the dom

    原因,多次使用 echarts.init(document.getElementById(this.options.zid)); 解决方案 设为全局

  2. eclipse创建springboot项目的三种方法

    本文链接:https://blog.csdn.net/mousede/article/details/81285693 方法一 安装STS插件 安装插件导向窗口完成后,在eclipse右下角将会出现安 ...

  3. java之mybatis之占位符

    1.mybatis中有两种占位符 #{}和 ${}. 2. #{} 占位符是为了获取值,获取的值用在 where 语句后,insert 语句后,update 语句. #{} 获取值,是根据值的名称取值 ...

  4. C# vb .net实现像素化效果滤镜打马赛克

    在.net中,如何简单快捷地实现Photoshop滤镜组中的像素化效果打马赛克呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授 ...

  5. MVC学习笔记(一)—用EF创建数据库

    1.新建MVC项目     2.在Models文件夹下添加名为User的新类   2.1 Users类中的代码为: public class Users { /// <summary> / ...

  6. 用GraphicsMagick处理svg转png遇到的坑

    1前言 用GraphicsMagick处理svg转png,且背景是透明且没有黑边,由于使用虚拟机的gm版本是1.3.28导致有黑边问题且svg中path中有opacity属性时,加上+antialia ...

  7. JVM性能优化--Java的垃圾回收机制

    一.Java内存结构 1.Java堆(Java Heap) java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例 ...

  8. (转载) @ConfigurationProperties 注解使用姿势,这一篇就够了

    SpringBoot中的@ConfigurationProperties 传送门: http://www.hellojava.com/a/82613.html

  9. pandas-08 pd.cut()的功能和作用

    pandas-08 pd.cut()的功能和作用 pd.cut()的作用,有点类似给成绩设定优良中差,比如:0-59分为差,60-70分为中,71-80分为优秀等等,在pandas中,也提供了这样一个 ...

  10. Nginx配置Yii:backend&frontend

    #My vlson.top project #frontend server { listen 80; server_name www.vlson.com; #charset koi8-r; set ...