先上代码
package mainimport ( "log" sqle "github.com/liquidata-inc/go-mysql-server" "github.com/liquidata-inc/go-mysql-server/auth" "github.com/liquidata-inc/go-mysql-server/memory" "github.com/liquidata-inc/go-mysql-server/server")func main() { driver := sqle.NewDefault() db := memory.NewDatabase("test") driver.AddDatabase(db) config := server.Config{ Protocol: "tcp", Address: "localhost:3306", Auth: auth.NewNativeSingle("root", "", auth.AllPermissions), } s, err := server.NewDefaultServer(config, driver) if err != nil { log.Fatal(err) } defer s.Close() s.Start()}
从上面代码可以看出,该实现完全依赖go-mysql-server,
纯Go语言实现
是一个SQL引擎,用于解析标准SQL(基于MySQL语法),解析和优化查询。它提供了简单的界面,以允许自定义表格数据源实现。
还提供了与MySQL协议兼容的服务器实现。这意味着它与MySQL ODBC,JDBC或默认的MySQL客户端兼容。
db := memory.NewDatabase("test")
创建一个名为test的内存数据库
config := server.Config{ Protocol: "tcp", Address: "localhost:3306", Auth: auth.NewNativeSingle("root", "", auth.AllPermissions), }
使用tcp协议
服务器地址为localhost
端口为3306
用户名为root
密码为空
编译运行
$go build ./srv
客户端连接测试
Go语言客户端代码测试
package mainimport ( "fmt" "log" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx")//Client just a examplefunc main() { url:="root:@tcp(127.0.0.1:3306)/test" db, err := sqlx.Open("mysql", url) if err != nil { log.Fatal(err) } defer db.Close() ddl := ` CREATE TABLE products0 ( product_id smallint NOT NULL, product_name character varying(40) NOT NULL, supplier_id smallint, category_id smallint, quantity_per_unit character varying(20), unit_price real, units_in_stock smallint, units_on_order smallint, reorder_level smallint, discontinued integer NOT NULL ); ` _, err = db.Exec(ddl) if err != nil { log.Fatal(err) } rows, err := db.Query("show create table products0;") if err != nil { log.Fatal(err) } for rows.Next() { var table string var schema string if err := rows.Scan(&table, &schema); err != nil { log.Fatal(err) } fmt.Println(table) fmt.Println(schema) }}
运行,返回,
products0CREATE TABLE `products0` ( `product_id` smallint NOT NULL, `product_name` varchar(40) NOT NULL, `supplier_id` smallint, `category_id` smallint, `quantity_per_unit` varchar(20), `unit_price` double, `units_in_stock` smallint, `units_on_order` smallint, `reorder_level` smallint, `discontinued` int NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
基于go-mysql-server的开源实现
dolt
gitbase
两个都和Git有关的服务器
参考
https://github.com/src-d/gitbase
https://github.com/src-d/go-mysql-server
https://github.com/liquidata-inc/dolt