使用GitBucket将H2数据库迁移至关系型数据库

事件的经过

听说GitBucket使用了H2数据库来存储各种信息,但由于我不知道如何使用它,所以决定切换到其他的SQL数据库。

转车后的结果 de

坦率地说,我认为GitBucket变得很慢。
请参考:Cassandra、MongoDB、SQLite、H2、MySQL、Postgres的性能比较 – C/pHeR备忘录 – 关于Java、Eclipse等。

准备好

    • rootでログインし直してsystem administrationからdb export.

 

    • gitbucketを落としておく

 

    ポスグレを入れておく

我来试试用MariaDB。

试图启动GitBucket时出现错误,并且无法通过浏览器访问,显示503错误。
根据此网站所说,似乎无法在视图的FROM中使用子查询。
关于GitBucket + MariaDB的建立遇到了问题 – 请避免不必要的困扰。

我对于使用PostgreSQL感到确信,因此决定采用PostgreSQL。

试试使用PostgreSQL

MySQL仅作为私人用途,并被其他软件(如WordPress和ownCloud)所需,因此我并不完全相信这种软件,因此将用户分开使用。
另一方面,PostgreSQL是在数据分析工作中,我自己搭建的专用服务器上使用的,因此我只使用postgres用户进行访问。
对于这种我自己没有编写过任何代码的软件,我有些担心它的使用方式,所以我会努力进行设置。

创建用户并实现登录功能。

在使用密码验证的PostgreSQL中,可以通过参考此处以了解createuser的选项。

sudo su - postgres  # postgresになってポスグレ関連コマンドを使う
createuser -D -E -R -S -P UESRNAME
createdb DBNAME

用户认证方法和访问权限设置。在假设在同一主机上运行DB和GitBucket的前提下。注意,如果将地址的类型指定为local时,可能会导致无法运行。

--- a/9.6/main/pg_hba.conf
+++ b/9.6/main/pg_hba.conf
@@ -85,6 +85,7 @@
 local   all             postgres                                peer

 # TYPE  DATABASE        USER            ADDRESS                 METHOD
+local   DBNAME          USERNAME                                md5

 # "local" is for Unix domain socket connections only
 local   all             all                                     peer
sudo service postgres restart
psql -U USERNAME DBNAME

当收到密码提示时,表示成功。

更改GitBucket的配置。

db {
  url = "jdbc:postgresql://localhost/gitbucket"
  user = "USERNAME"
  password = "PASSWORD"
}

数据的恢复

首先启动gitbucket。
然后准备H2时代导出的sql文件。
打开浏览器,使用初始设置的ID:root/PW:root登录。
从系统管理中导入sql文件,不限于xml文件。

按照先达的指示,尽管不太理解其含义,我们执行以下操作,相信会将特定于psql的设置转移过来。

SELECT setval('label_label_id_seq', (select max(label_id) + 1 from label));
SELECT setval('activity_activity_id_seq', (select max(activity_id) + 1 from activity));
SELECT setval('access_token_access_token_id_seq', (select max(access_token_id) + 1 from access_token));
SELECT setval('commit_comment_comment_id_seq', (select max(comment_id) + 1 from commit_comment));
SELECT setval('commit_status_commit_status_id_seq', (select max(commit_status_id) + 1 from commit_status));
SELECT setval('milestone_milestone_id_seq', (select max(milestone_id) + 1 from milestone));
SELECT setval('issue_comment_comment_id_seq', (select max(comment_id) + 1 from issue_comment));
SELECT setval('ssh_key_ssh_key_id_seq', (select max(ssh_key_id) + 1 from ssh_key));

启动并完成GitBucket。

广告
将在 10 秒后关闭
bannerAds