TiDB run and debug on M1
一、Summary
前不久刚换 Mac M1 时,不禁被自己的盲目的 “吃螃蟹🦀️行为” 蠢哭了。由于 M1 的是 arm 服务器,在做各种数据库测试时搭建本地环境很是不便,尤其是 DEBUG 数据库代码。
我曾做过如下尝试:
1. 在远程家中 windows 搭建虚拟机,购买腾讯云服务器作为中间跳板机,使用 frp 软件穿透内网映射虚拟机 IP 至云服务器 IP:
优点:Oracle、TiDB、MySQL、PG 随机搭建,不受平台、机器指令集限制。
缺点:内网穿透效率效率受外网网速限制,有时在客户现场想做个实验直接卡死。
此外,更不便的是使用 vscode 的 remote code 功能或 TiDE 去 debug tidb 时灵是不灵。
2. 在 M1 arch 架构长寻找运行 x86 软指令集的 VM,目前已经有些软件支持了,如:QEMU、ACVM、UTM、ToyVM 等,详情可浏览 油管视频-Apple Silicon M1 Virtualization: Running x86 and ARM Virtual Machines,结果不是运行效率低下几乎卡死,就是不定不稳定会影响数据库使用,投入产出比不高。
最后惊喜的发现, TiDB 原生支持了 TiDB running on M1,详情参考官网
1. 起初,我曾尝试过直接在 M1 上 build tidb,当时应为依赖库有问题,尚未成功。在看了一篇 TiDB 作者文章-在 ARM64 上面运行 TiDB 发现在 arm 上是应有成功经验的,于是重新尝试。
2. 这是 build 直接就成功了,查阅 tidb 官方文档发现从 v5.2.2 开始已经提供了 tiup playground 实验集群支持。
二、Tiup Operations
分别安装、启动可持久化 tidb 存储层数据的集群,名为 mycluster。启动之后 Dashboard、Promethus 均可观察到部分图像。但美中不足的是,当我想 tiup cluster cluster-name deploy topology.yaml 真正部署一个集群时,发现 tiup 之前基于 linux 自定义的 service,但 M1 中并不是一套指令,所以会报错。 不过已经能满足日常实验、DEBUG需求了
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh \
tiup --tag mycluster playground v5.2.1 --db 1 --pd 3 --kv 3 --monitor
三、Patching TiDB
3.1 改写代码
Clone Repo 库代码;
shellgit clone https://github.com/pingcap/tidb.git \ && cd tidb/util/printer
手动将日志内容 logutil.BgLogger().Info("Welcome to TiDB version." 修改为 logutil.BgLogger().Info("Welcome to TiDB which is special Jan version.";
3.2 手动 Build TiDB
Build TiDB 观察到 Build TiDB Server successfully! 说明已经编译成功。
cd ../.. && make
3.3 手动 Patch TiDB
手动将新编译好的 tidb-server 二进制文件放入 tiup 启动目录。**注意:**替换 YOUR_COMPUTER_USERNAME 为自己真正用户名。
cd bin && mv tidb-server tidb-server.version_jan \
mv tidb-server.version_jan /Users/YOUR_COMPUTER_USERNAME/.tiup/components/tidb/v5.2.1/ \
mv tidb-server.bak && mv tidb-server.version_jan tidb-server
3.4 日志验证
启动 tidb 并验证改动是否生效。cat 观察到信息 “Welcome to TiDB which is special Jan version” 说明改动成功。
tiup --tag mycluster playground v5.2.1 --db 1 --pd 3 --kv 3 --monitor \
cd /Users/YOUR_COMPUTER_USERNAME/.tiup/data/mycluster/tidb-0 \
cat tidb.log|grep "Jan version"
四、TiDE DEBUG TiDB
VsCode 安装 TiDE 按照 与 TiDE Step-by-Step Guide 一步步操作便可 DEBUG 了,或者参考 Aiky哇 写的指引也挺好,基本内容一致。 下面展示一张我本地电脑 DEBUG 成功的图片,✌️!