使用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));