TiDB 本地尝鲜

@vrqq  April 15, 2021

网上教程少之又少,好在程序设计简洁试下就出来了

大伙下载完之后

export TIUP_HOME=/my-tiup-home
./local_install.sh

然后使用tiup playground玩一把,但注意这个playground是一次性的 不保留数据
将所有组件玩一遍之后,下面以我的机器举例举例,linux机两块网卡 内网网卡ip 172.20.0.2,配单机1pd, 1tidb, 1tikv,无Prometheus检测探头。

正文

pd.toml (模板 https://github.com/tikv/pd/blob/master/conf/config.toml)

name = "fable_pd"
data-dir = "/project/fable/tidata/pd"
client-urls = "http://172.20.0.2:2379"
peer-urls = "http://127.0.0.1:2380"

[log.file]
filename = "pd.log"

tikv.toml (模板 https://github.com/tikv/tikv/blob/master/etc/config-template.toml)

log-file = "tikv.log"

[server]
## Listening address.
addr = "127.0.0.1:20160"
status-addr = "127.0.0.1:20180"

[storage]
## The path to RocksDB directory.
data-dir = "/project/fable/tidata/tikv"

[pd]
endpoints = ["172.20.0.2:2379"]

tidb.toml (模板 https://github.com/pingcap/tidb/blob/master/config/config.toml.example)
中文参考: https://docs.pingcap.com/zh/tidb/stable/command-line-flags-for-tidb-configuration

# TiDB server host.
host = "172.20.0.2"

# TiDB server port.
port = 4000

# Registered store name, [tikv, mocktikv, unistore]
store = "tikv"

# TiDB storage path. (pd peer-urls)
path = "172.20.0.2:2379"

enable-telemetry = false

# File logging.
[log.file]
filename = "tidb.log"

配置文件准备完成后 启动顺序如下
pd -> tikv -> tidb

  • tiup pd -config pd.toml &
  • tiup tikv --config tikv.toml &
  • tiup tidb -config tidb.toml &
  • 注意那个--config和-config是不一样的哈哈,另外第一次启动时把配置文件里得log注释掉 (前面加#)并且命令去掉&前台运行,观察是否配置成功了或者哪里有问题
  • 流程是:启动pd和tikv后,tidb向pd找背后的tikv。这里tidb也可以选不用分布式tikv详见官方文档
  • 启动后打开 http://172.20.0.2:2379/dashboard 注意防火墙需要放开上述几个端口

后记

我觉得tiup cluster 有点over engineer了,个人感觉yaml比toml难写的多,文档又看着头大,裸配置这么简单,官方也该有个文档样例嘛。
私以为软件开发不应出现断层,像macos可能是最好的例子,kernel -> {terminal + GUI} 衔接紧密又层次清晰。

Next section: SQL行锁

SQL阿白的快速入门知识,打开SQL客户端的两个Query窗口。(每个窗口对应一个connection)

  • SELECT 没有FOR啥 快照读
  • SELECT FOR UPDATE eXclusive行锁,类似于mutex
  • LOCK IN SHARE MODE RW共享锁,类似于read-write mutex
    在两个窗口里按顺序Select and run如下代码

    SET autocommit=0;
    START TRANSACTION;
    SELECT * FROM crab_runtime WHERE rt_key = 'k_alloc' FOR UPDATE;
    
    COMMIT;

可以发现:
1、运行step1会立刻返回select结果,然后第二个窗口step2会卡住,query time持续读秒。
2、然后第一个窗口的step3(commit)后一执行,第二个窗口step2的select就立刻返回了。
3、最后运行step4 (commit) 为当前连接 释放锁。
可以观测到eXclusive排他锁是和mutex一样的特性,接下来把第二个窗口的FOR UPDATE去掉,再分步运行,可以发现他读快照了。
注意TiDB不支持LOCK IN SHARE MODE (RW mutex)

Reference: https://www.cnblogs.com/rjzheng/p/9950951.html


添加新评论