迁移drone.io的sqlite数据库到postgresql数据库
背景
drone.io默认安装的时候是使用sqlite数据库,可以用于演示产品,但是一旦git仓库数量过多,build次数过多之后,会越用越卡,从长远来看,想用于生产环境,还是得转向postgresql数据库。关于postgresql数据库的配置可以参考如下页面。主要是设置一个数据库来源和postgresql数据库连接串信息
https://docs.drone.io/server/storage/database/#postgres
实施步骤
1.找到drone.io的原始sqlite数据库。
如果我们采用的是kubernetes的helmchart安装,一般会在drone命名空间里的pvc里找到,可以通过 kubectl命令去找
kubectl get pvc -n drone
kubectl get pv
kubectl describe pv $(drone的pv名字)
找到存储位置后,具体的sqlite数据库文件叫database.sqlite 可以通过CP命令复制一份database.sqlite出来备份
2.安装postgresql数据库
postgresql数据库的安装还是比较简单的,安装完成之后,再创建一个用于存储drone数据的数据库实例和用户
sudo apt update
sudo apt install postgresql
su postgres
psql
create user 数据库用户名 with password '数据库密码';
create database 数据库实例 owner 数据库用户名;
revoke all on database 数据库实例 from public;
3.安装pgloader工具
pgloader是一款用于从其他数据库导数据到postgresql的工具,此工具安装和使用比较方便,但是有一个缺陷,占用内存会比较大,比如我这里要导入的sqlite数据库有5个G,那么该程序在运行的过程中至少要用10个G的内存,如果不够的话,会在运行一段时间之后被oom kill 掉,加上系统本身运行需要一些内存,我建议得准备一个16G内存的服务器
apt-get install pgloader
#安装完成后添加一个db.load文件,内容如下:
load database
from sqlite:///home/sfere/database.sqlite
into postgresql://数据库用户名:数据库密码@数据库ip/数据库实例
with truncate,
create tables,
create indexes,
reset sequences
;
4.转换前需要重建sqlite数据库”构建信息表“
如果不做这一步,会报错
ERROR Database error 42704: type “number” does not exist
所以我们重建builds表
CREATE TABLE builds1
(
build_id bigserial,
build_repo_id bigint,
build_trigger text,
build_number bigint,
build_parent bigint,
build_status text,
build_error text,
build_event text,
build_action text,
build_link text,
build_timestamp bigint,
build_title text,
build_message text,
build_before text,
build_after text,
build_ref text,
build_source_repo text,
build_source text,
build_target text,
build_author text,
build_author_name text,
build_author_email text,
build_author_avatar text,
build_sender text,
build_deploy text,
build_params text,
build_started bigint,
build_finished bigint,
build_created bigint,
build_updated bigint,
build_version bigint,
build_debug bool,
build_cron text default '',
build_deploy_id bigint default '0'
);
INSERT INTO builds1 SELECT * FROM builds;
drop table builds;
ALTER TABLE `builds1` RENAME TO `builds`
5.开始导入数据到postgresql,导入完成后检查postgresql数据库里是否有对应的数据
pgloader db.load
6.导入完成,更新drone server,可以通过修改kubernetes资源的方式,或者修改helm chart 的values.yaml的方式添加环境变量
DRONE_DATABASE_DRIVER=postgres DRONE_DATABASE_DATASOURCE=postgres://用户名:密码@数据库IP:5432/数据库实例?sslmode=disable