go实现一个兼容mysql协议的虚拟数据库代码

代码语言:golang

所属分类:其他

代码描述:go实现一个兼容mysql协议的虚拟数据库代码,对外可以连接执行sql命令并返回数据,客户端看上去像一个真的mysql数据,其实都是go返回的虚假数据。

代码标签: go 兼容 mysql 协议 虚拟 数据库 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

package main

import (
   
"bytes"
   
"encoding/binary"
   
"fmt"
   
"log"
   
"net"

   
"github.com/go-mysql-org/go-mysql/mysql"
   
"github.com/go-mysql-org/go-mysql/server"
)

func main
() {
   
// 启动虚拟 MySQL 服务器
    l
, err := net.Listen("tcp", "127.0.0.1:3307")
   
if err != nil {
        log
.Fatal(err)
   
}
    defer l
.Close()
    log
.Println("Virtual MySQL server is listening on 127.0.0.1:3307")

   
for {
        conn
, err := l.Accept()
       
if err != nil {
            log
.Println(err)
           
continue
       
}

        go handleConnection
(conn)
   
}
}

func handleConnection
(conn net.Conn) {
   
// 确保连接在所有情况下都被关闭
    defer conn
.Close()

   
// 创建一个新的 MySQL 连接
    c
, err := server.NewConn(conn, "root", "passwd", &MySQLHandler{})
   
if err != nil {
        log
.Println("Failed to create MySQL connection:", err)
       
return
   
}

   
for {
       
if err := c.HandleCommand(); err != nil {
            log
.Println("Connection closed:", err)
           
return
       
}
   
}
}

type
MySQLHandler struct{}

func
(h *MySQLHandler) UseDB(dbName string) error {
    fmt
.Printf("Use database: %s\n", dbName)
   
return nil
}

func
(h *MySQLHandler) HandleQuery(query string) (*mysql.Result, error) {
    fmt
.Printf(&qu.........完整代码请登录后点击上方下载按钮下载查看

网友评论0