1.前言
前段时间Halo博客升级到2.22.X版本之后,很不稳定,CPU经常干到100%。当前Halo是和MySQL数据库部署在一起的,此外,还部署有若干应用(Golang、Java)均有,资源比较吃紧。
虽然还有个云主机(阿里云99元套餐,2C2G),但是跑着一个业务MySQL。
思前想后,决定将当前两个主机上的MySQL实例干掉,考虑使用云MySQL来减轻主机的性能开销。刚开始考虑阿里云的MySQL,准备评估下按量付费,但是此时想到了白月光TiDB,于是去其官网扒拉下,如果便宜的话倒是可以考虑。
结果发现TiDB有免费套餐。
2.什么是TiDB
TiDB是分布式关系型数据库,高度强兼容MySQL协议和MySQL生态,稳定适配MySQL 5.7和MySQL 8.0常用的功能及语法。随着版本的迭代,TiDB 在弹性扩展、分布式事务、强一致性基础上进一步针对稳定性、性能、易用性等方面进行优化和增强。与传统的单机数据库相比,TiDB具有以下优势:
分布式架构,拥有良好的扩展性,支持对业务透明灵活弹性的扩缩容能力,无需分片键设计以及开发运维。
HTAP 架构支撑,支持在处理高并发事务操作的同时,对实时数据进行复杂分析,天然具备事务与分析物理隔离能力。
支持SQL完整生态,对外暴露MySQL的网络协议,强兼容MySQL的语法/语义,在大多数场景下可以直接替换MySQL。
默认支持自愈高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务无感。
支持ACID事务,对于一些有强一致需求的场景友好,满足RR以及RC隔离级别,可以在通用开发框架完成业务开发迭代。
2.1 免费套餐
TiDB有以下几种套餐:
TiDB Cloud Starter;
TiDB Cloud Essential;
TiDB Cloud Dedicated。
对于个人用户(博客、小应用等),建议考虑TiDB Cloud Starter;对于小型公司,则是可以考虑TiDB Cloud Essential,按量付费;对于大型企业来说,就可以考虑TiDB Cloud Dedicated,定制专门的部署集群。
这里引用官网对TiDB Cloud Starter的介绍:
TiDB Cloud Starter是一款全托管的多租户TiDB服务。它提供了一个即开即用、自动弹性扩展、兼容MySQL的数据库,并在超出免费额度后按用量计费。
免费集群方案非常适合刚开始使用TiDB Cloud Starter的用户。它为开发者和小型团队提供以下基础功能:
免费:该方案完全免费,无需信用卡即可开始使用。
存储:提供初始 5 GiB 的行存储和 5 GiB 的列存储。
Request Units:包含5000万*Request Units (RUs)*用于数据库操作。
可能这里会存在疑问,即仅% GiB的存储空间,不适合我使用,但是这里需要注意:对于TiDB Cloud中的每个组织,默认最多可以创建5个免费的TiDB Cloud Starter集群。换言之,就是个人可以总共拥有25 GiB存储空间。
对于超过这个数据量的用户,你得考虑TiDB Cloud Essential了。
我现在是将图片等资源存储于OSS等,因此MySQL中存储的业务数据倒是不多。
2.2 创建步骤
TiDB官网地址:https://tidbcloud.com/,首先需要去官网注册账号,我这里选择的是通过Email进行注册,还有Github、Google等三方认证登录方式。登录之后按照网站的交互指导一步步next,直至创建成功第一个TiDB Cloud Starter集群。

数据导入方面较为麻烦,有三种数据导入方式,
上传本地文件(仅限CSV);
通过云上文件导入(支持CSV、Parquet以及SQL文件);
通过MySQL Cli导入。
我这边选择了最诡异的方式,即通过SQL Editor导入,详见下图:

使用SQL Editor原因是,已经提前准备好了数据文件,且没有浏览完功能就执行操作了;还好,multi insert的执行速度还是蛮快的。
3.使用初步体验
因为集群部署在新加坡节点,所以SQL执行操作的时延略有升高,不过由于Halo有缓存机制,因此博客仅在开始时有些影响;此外,Halo的数据查询机制较为简单,并未使用到较为复杂的SQL语法,因此浏览博客网站并未发现到明显问题,现有的插件问题,也是因为。。。Halo的版本翻车了。
此外,对于个人应用来说,也并未使用到复杂的语法(或者个人应用,就不想写复杂的SQL),因此迁移数据库之后并未发现功能问题。
待后续有空的时候,还是需要比对下TiDB和MySQL的语法差异,以及一些默认行为的差异(例如Auto Incrment设置等)。
以下是当前的数据库监控图(还有诸如慢SQL日志等):

总而言之,这次上车体验还是比较舒服的。