Waline 脱离 LeanCloud:Vercel 后端迁移到 TiDB Cloud 与评论数据保全
前言
为什么必须现在迁?
LeanCloud 官方已发布公告,将停止对外服务,所有依赖它存评论的 Waline 实例都面临数据清零风险。
好消息是,Waline 原生支持 TiDB,只需切换 TIDB_* 环境变量即可完成后端替换,且 TiDB Cloud 提供 5GB 免费额度,对个人博客完全够用。
本文记录从 Waline 后端导出、TiDB 建表、Vercel 重部署、数据导入到验证数据完整性的完整链路,确保每一条评论、每一个阅读计数都不丢。
准备工作
开始前,请确认以下事项已准备就绪:
- 已部署的 Waline 后端(Vercel / Docker / Node 均可,本文以 Vercel 为主)
- Waline 管理员账号,能进
/ui管理后台 - TiDB Cloud 账号(Serverless Tier,5GB 免费额度够个人博客用)
从 Waline 管理后台导出旧数据
- 打开 Waline 管理后台:https://你的waline域名/ui/login?redirect=/ui

- 用管理员账号登录

- 点击「导入/导出」→「导出」

- 下载
waline.json
在 TiDB Cloud 创建 waline 数据库及表项
TiDB 是一款开源分布式 NewSQL 数据库,TiDB Cloud 是其官方提供的全托管云服务,它提供了 5GB 的免费额度。下面介绍下如何在 TiDB Cloud 上创建 Waline 数据库。
登录 TiDB Cloud
- TiDB Cloud:https://tidbcloud.com

创建 TiDB 实例
- 左侧边栏点击「My TiDB」→「Create Resource」

- 选择「Starter」、「MySQL Compatible」

- 设置实例名称(Instance Name):
waline-database
- 选择区域(Region):Singapore (ap-southeast-1) 新加坡

- 点击「Create」创建

创建数据库及表项
- 切换到「SQL Editor」

创建
waline数据库
1
CREATE DATABASE `waline`;
切换到
waline数据库
1
USE waline;
创建
wl_Comment表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20CREATE TABLE `wl_Comment` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`user_id` int DEFAULT NULL,
`comment` text,
`insertedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`ip` varchar(100) DEFAULT '',
`link` varchar(255) DEFAULT NULL,
`mail` varchar(255) DEFAULT NULL,
`nick` varchar(255) DEFAULT NULL,
`pid` int DEFAULT NULL,
`rid` int DEFAULT NULL,
`sticky` boolean DEFAULT NULL,
`status` varchar(50) NOT NULL DEFAULT '',
`like` int DEFAULT NULL,
`ua` text,
`url` varchar(255) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) CHARSET=utf8mb4;创建
wl_Counter表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17CREATE TABLE `wl_Counter` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`time` int DEFAULT NULL,
`reaction0` int DEFAULT NULL,
`reaction1` int DEFAULT NULL,
`reaction2` int DEFAULT NULL,
`reaction3` int DEFAULT NULL,
`reaction4` int DEFAULT NULL,
`reaction5` int DEFAULT NULL,
`reaction6` int DEFAULT NULL,
`reaction7` int DEFAULT NULL,
`reaction8` int DEFAULT NULL,
`url` varchar(255) NOT NULL DEFAULT '',
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) CHARSET=utf8mb4;创建
wl_Users表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21CREATE TABLE `wl_Users` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`display_name` varchar(255) NOT NULL DEFAULT '',
`email` varchar(255) NOT NULL DEFAULT '',
`password` varchar(255) NOT NULL DEFAULT '',
`type` varchar(50) NOT NULL DEFAULT '',
`label` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`avatar` varchar(255) DEFAULT NULL,
`github` varchar(255) DEFAULT NULL,
`twitter` varchar(255) DEFAULT NULL,
`facebook` varchar(255) DEFAULT NULL,
`google` varchar(255) DEFAULT NULL,
`weibo` varchar(255) DEFAULT NULL,
`qq` varchar(255) DEFAULT NULL,
`oidc` varchar(255) DEFAULT NULL,
`2fa` varchar(32) DEFAULT NULL,
`createdAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updatedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) CHARSET=utf8mb4;
准备 TiDB 连接配置
- 左侧边栏点击「Overview」→「Connect」

- 数据库(Database)选择
waline,操作系统(Operating System)选择macOS
- Connect with 选择
General,点击Generate password生成密码
保存以下连接参数(Parameters)
1
2
3
4
5
6HOST: ****************.aws.tidbcloud.com
PORT: 4000
USERNAME: 123.root
PASSWORD: 1234567890uC37vC
DATABASE: waline
CA: /etc/ssl/cert.pem
修改 Vercel 环境变量
- 进入 Vercel
- 左侧边栏点击「Projects」,选择你的 Waline 项目

新增 TiDB 环境变量
- 左侧边栏点击「Environment Variables」→「Add Environment Variable」

- 添加环境变量
TIDB_HOST、TIDB_PORT、TIDB_USER、TIDB_PASSWORD、TIDB_DB
| 环境变量名称(Key) | 备注 |
|---|---|
| TIDB_HOST | TiDB 的 HOST |
| TIDB_PORT | TiDB 的 PORT |
| TIDB_USER | TiDB 的 USERNAME |
| TIDB_PASSWORD | TiDB 的 PASSWORD |
| TIDB_DB | TiDB 的 DATABASE |
经典踩坑提示:若将 TIDB_USER 误写为 IDB_USER,Waline 不会直接报错,但 Function Logs 中会出现 No valid storage found 提示,页面评论区表现为”看似已连接,实则未真正连通”。
删除 LeanCloud 变量
- 删除环境变量
LEAN_ID、LEAN_KEY、LEAN_MASTER_KEY
| 环境变量名称(Key) | 备注 |
|---|---|
| LEAN_ID | LeanCloud 的 AppID |
| LEAN_KEY | LeanCloud 的 AppKey |
| LEAN_MASTER_KEY | LeanCloud 的 MasterKey |
重新部署 waline 项目
- 左侧边栏点击「Deployments」,选择最新部署记录,点击「Redeploy」

- 点击「Redeploy」

使用 waline-data-import-tool 导入数据
这一步是整个迁移流程的关键所在。
Waline 导出的 waline.json 中,评论的 pid / rid 字段仍存储为 LeanCloud 的 ObjectID,而 TiDB 中 wl_Comment.id 为自增整数。
若直接将 JSON 数据导入数据库,父子评论关系将断裂,评论楼层也会显示混乱。waline-data-import-tool 会自动完成 ObjectID 到自增 ID 的映射转换,无需手动编写 SQL
创建项目文件夹
- 在本地创建文件夹
waline-migrate,后续所有文件都放在这里。
下载 waline-data-import-tool
- 项目地址:https://github.com/elkan1788/waline-data-import-tool
- 下载链接:https://github.com/elkan1788/waline-data-import-tool/releases
- 本文以 Windows 系统为例,下载
waline-data-import-tool.exe.zip并解压至waline-migrate目录:
其他系统对应版本:
| 系统 | 文件名 |
|---|---|
| macOS Apple Silicon | waline-data-import-tool-darwin-arm64 |
| macOS Intel | waline-data-import-tool-darwin-amd64 |
| Linux x86_64 | waline-data-import-tool-linux |
| Linux arm64 | waline-data-import-tool-arm64 |
| Windows | waline-data-import-tool.exe |
下载 CA 根证书
TiDB Cloud Serverless 公开端点强制 TLS,需要 CA 证书。
在浏览器中访问 https://letsencrypt.org/certs/isrgrootx1.pem,将页面内容保存为
isrgrootx1.pem文件,放置于waline-migrate目录下。
创建 waline-tidb.ini 文件
在
waline-migrate目录下新建waline-tidb.ini文件,写入以下内容(请替换为你的 TiDB 实际连接信息):1
2
3
4
5
6
7[tidb]
host=gateway01.ap-southeast-1.prod.aws.tidbcloud.com
port=4000
user=123.root
password=1234567890uC37vC
database=waline
ca=./isrgrootx1.pem
如果 TiDB Cloud 控制台显示的 user 带有 .root 后缀,必须完整填写。
准备 waline.json 数据文件
- 将从 Waline 管理后台导出旧数据步骤中下载的
waline.json复制到waline-migrate目录下。
确认目录结构
导入前确认
waline-migrate目录中包含以下文件:1
2
3
4
5waline-migrate/
├── waline.json # 从 Waline 后台导出的数据
├── waline-data-import-tool.exe # 导入工具
├── waline-tidb.ini # TiDB 连接配置
└── isrgrootx1.pem # CA 根证书
运行导入命令
在
waline-migrate目录下打开终端,输入:
1
./waline-data-import-tool -f ./waline.json -c ./waline-tidb.ini
程序运行时会提示将清空目标表,输入 y 并回车确认:

- 当终端输出 Users 导入完成、Comments 导入完成、Counter 导入完成 提示时,即表示数据导入成功。

校验迁移数据
- 打开 Waline 管理后台:https://你的waline域名/ui/login?redirect=/ui,用原管理员账号登录。

- 查看评论数据结构是否正常(包括父子回复关系、楼层顺序、昵称及头像是否完整)

- 查看用户数据是否正确迁移(管理员账号是否存在、OAuth 绑定关系是否保留)

总结
将 Waline 从 LeanCloud 迁移至 TiDB Cloud,核心流程可归纳为以下四步:
- 先导出:
waline.json是唯一真相源; - 再建表:
wl_Comment / wl_Counter / wl_Users别漏 OAuth 字段; - 再导入:用
waline-data-import-tool处理 ObjectID → 自增 ID 的映射; - 最后切流量:Vercel 加
TIDB_*,删LEAN_*,Redeploy。
个人博客数据量通常较小,TiDB Serverless 的 5GB 免费额度基本够用。只要环境变量配置无误、注意时区设置,整个迁移过程通常可在 30 分钟至 2 小时内完成。
总结一句话:LeanCloud 退场不必恐慌,Waline 原生支持 TiDB,迁移成本主要集中在仔细配置环境变量,避免手误。





