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