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,结果不是运行效率低下几乎卡死,就是不稳定到会影响数据库使用,精力投入产出比不高。
3. 如果 frp 配合 TiDE 又无法很好实现远程 DEBUG,详情如此贴所述;
最后惊喜的发现, 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 需求了
三、Patching TiDB
3.1 改写代码
Clone Repo 库代码;
手动将日志内容 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! 说明已经编译成功。
3.3 手动 Patch TiDB
手动将新编译好的 tidb-server 二进制文件放入 tiup 启动目录。** 注意:** 替换 YOUR_COMPUTER_USERNAME 为自己真正用户名。
3.4 日志验证
启动 tidb 并验证改动是否生效。cat 观察到信息 “Welcome to TiDB which is special Jan version” 说明改动成功。
四、TiDE DEBUG TiDB
VsCode 安装 TiDE 按照 与 TiDE Step-by-Step Guide 一步步操作便可 DEBUG 了,或者参考 Aiky 哇 写的指引也挺好,基本内容一致。
下面展示一张我本地电脑 DEBUG 成功的图片,✌️!
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/8cbf920ab7177faf1a5ea4ff6】。文章转载请联系作者。
评论