vitess使用:从部署到go客户端连接查询
网络上似乎没有一个简易的教程,官方的资料又是纯英文版本的,我只有一步步摸着石头过河,还有很多问题没有解决,如果有熟悉vitess的大佬,还请帮忙指点一二。这篇文章目前还没有什么逻辑,主要是记录一下我在学习过程中遇到的问题。
我是基于docker部署,首先体验一下这个组件的功能边界。主要是基于官方文档The Vitess Docs | Vttestserver Docker Image
实施部署。
目前是按照官方提供的命令运行的vitessserver。
docker run --name=vttestserver \
-p 33574:33574 \
-p 33575:33575 \
-p 33577:33577 \
-e PORT=33574 \
-e KEYSPACES=test,unsharded \
-e NUM_SHARDS=2,1 \
-e MYSQL_MAX_CONNECTIONS=70000 \
-e MYSQL_BIND_HOST=0.0.0.0 \
-e VTCOMBO_BIND_HOST=0.0.0.0 \
--health-cmd="mysqladmin ping -h127.0.0.1 -P33577" \
--health-interval=5s \
--health-timeout=2s \
--health-retries=5 \
vitess/vttestserver:mysql80
通过navicat连接,查看数据库内容会报错。
安装了mysql workbench能够正常打开数据库,也能执行查看表结构等操作。
简单的go程序示例:
package main
import (
"fmt"
"log"
"vitess.io/vitess/go/vt/vitessdriver"
)
func main() {
// 连接 vtgate
/*
// Open is a Vitess helper function for sql.Open().
//
// It opens a database connection to vtgate running at "address".
func Open(address, target string) (*sql.DB, error) {
c := Configuration{
Address: address,
Target: target,
}
return OpenWithConfiguration(c)
}
关于target参数的说明:
- target参数是一个逗号分隔的字符串,用于指定查询的目标,格式为:keyspace@primary
- keyspace:指定要查询的数据库实例
- primary:指定要查询的数据库实例的主分片
*/
db, err := vitessdriver.Open("localhost:33575", "unsharded@primary")
if err != nil {
panic(err)
}
defer db.Close()
// 执行查询
rows, err := db.Query("SELECT * FROM user WHERE id = 1")
if err != nil {
panic(err)
}
defer rows.Close()
// 处理查询结果
// 输出查询结果
for rows.Next() {
var column1 int64
var column2 string
if err := rows.Scan(&column1, &column2); err != nil {
log.Fatal(err)
}
fmt.Println(column1, column2)
}
}
总结
这篇文章写的完全没有逻辑,主要是我目前还不清楚vitess怎么玩,只是做一个简单的记录,以及,在使用过程中遇到的各种问题。后续待我理清楚了其中的逻辑,我再重新梳理文章的逻辑。