发布于 

Waline的数据库从LeanCloud迁移到了TiDB

书接上回,今天仔细翻阅Waline官方文档,在不断尝试中终于把数据库搞定了,将过程记录下来,供以后翻阅。

一、按照官方文档建立TiDB数据库

1、建库

注册并登陆TiDB后,点击右上角的Creats Resource

在弹出页面中

Plan选择Starter;

Instance Name自己取一个,我为了方便就设为Waline;

Cloud Provider设置为Alibaba Cloud;

Region选择新加坡;

Monthly Spending Limit设为0;

点击右键下的Create创建实例。

等待不到一分钟就建好了。

2、运行代码

左侧选择SQL Editor,按照官方文档,先后将以下5段代码粘贴进去并运行。

注意,每粘贴进去一段代码就运行一次,一共运行5次。
1
CREATE DATABASE `waline`;
1
USE waline;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE 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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE 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;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE 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的数据库就建好了

二、获取TiDB数据库的连接配置

点击左侧的Overview,再点右上角的Connect就会在弹出窗口里显示连接信息。

1、创建密码

Database选择waline,再点击中间右侧的Generate Password创建密码

2、保存到本地

用以上参数建立一个waline-tidb.ini文件

1
2
3
4
5
6
7
[tidb]
host=gateway01.xxx.prod.alicloud.tidbcloud.com
port=4000
user=xxxx.root
password=xxxxx
database=waline
ca=/etc/ssl/cert.pem

三、导出原数据

LeanCloud的提供的数据导出会将数据按类别分成多个jsonl文件,用Waline后台提供的数据导出则只会导出一个jsonl文件,我们用第二种。

进入Waling的后台,登陆管理员账号后点头像,在弹出的窗口中点Migration,选择Export即可得到一个waline.jsonl文件。

四、将原数据导入至TiDB

1、快捷工具

这里需要用到waline-data-import-tool工具,根据你自己操作平台下载对应的版本

文件名 对应平台
waline-data-import-tool-arm64 Linux arm64
waline-data-import-tool-linux Linux x86_64
waline-data-import-tool-amd64 macOS Intel
waline-data-import-tool-darwin-arm64 macOS Apple Silicon
waline-data-import-tool.exe.zip windows

我是m1芯片的MacBook,下载waline-data-import-tool-darwin-arm64,并与waline-tidb.iniwaline.jsonl两个文件放在同一个目录下

2、执行导入数据库的命令

在终端里进入三个文件的目录执行以下命令

1
./waline-data-import-tool-darwin-arm64 -c waline-tidb.ini -f waline.json

我这提示permission denied: ./waline-data-import-tool-darwin-arm64,

权限不足,通过sudo su切换到root用户并再次执行

发现还是权限不足

执行

1
ls -l waline-data-import-tool-darwin-arm64

发现只有读写权限,没有执行权限

通过

1
chmod 777 waline-data-import-tool-darwin-arm64

授权读、写、执行权限后再次执行上一部的命令

这下成功执行了,根据提示按y继续

等待数据完成导入。

五、更改Waline的环境变量

将原来的LEAN_IDLEAN_KEYLEAN_MASTER_KEYLEAN_SERVER删掉,新增以下几个变量,后面两个变量我搞不懂,似乎不用配置也可以。

环境变量名称 备注
TIDB_DB waline TiDB 数据库库名
TIDB_USER TiDB 数据库的用户名
TIDB_PASSWORD TiDB 数据库的密码
TIDB_HOST TiDB 服务的地址
TIDB_PORT 4000 TiDB 服务的端口
TIDB_PREFIX wl_ TiDB 数据表的表前缀
TIDB_CHARSET utf8mb4 TiDB 数据表的字符集

重新部署即可

六、测试

进入博客页面,以前的评论还在那就表明成功了。

也可以随便在哪个地方评论一下,然后在TiDB的 SQL Editor 里执行

1
select * from wl_Comment order by id desc limit 3;

就能看到刚才新增的评论。

但是出现一个问题,数据产生的时间比实际时间早了8个小时

显而易见需要将TiDB的时间改为东8

设置TiDB的时区

回到TiDB首页,在Organization Settings里找到常规设置,Time Zone

改为UTC+08:00,并点击右侧的Update。

诶,可是好像没有卵用诶

那我们到Waline的数据库里,点左侧SQL Editor,运行以下两条代码

1
SET GLOBAL time_zone = '+8:00';-- 将全局时区设置为 UTC+8
1
SET time_zone = '+8:00'; -- 将当前会话时区设置为 UTC+8

然后执行

1
SELECT NOW(); -- 查看当前时间

显示的时间与当前北京时间一致。

搞定。


©2022 渝ICP备2022011696号-2 | Build By SkyReeves | Powered By Hexo Stellar
本站由 提供CDN加速/云储存 |