経緯
なんかgitbucketはH2とかいうDBを使って色々と情報を格納しているらしいが,使い方をしらんので他のSQLに乗り換えることにした.
乗り換えた結果
はっきし言って,gitbucketが重くなったと思う.
参考まで → パフォーマンス比較 Cassandra、Mongodb、SQLite、H2、MySQL、Postgres - C/pHeR Memo - Java とか。Eclipse とか。
準備
- rootでログインし直してsystem administrationからdb export.
- gitbucketを落としておく
- ポスグレを入れておく
MariaDBを試してみる
gitbucketを起動しようとするとエラーが出て,ブラウザからアクセスしても503エラーで接続できない.
このサイトによると,ビューのFROMでサブクエリが使えないらしい.
GitBucket + MariaDBの構築でハマった件 - 無理なご乗車はおやめ下さい。
ポスグレは確かできた気がするのでポスグレ採用.
PostgreSQLを試してみる
MySQLはプライベートで他のソフト(wordpressとかowncloudとか)に要求されて使ってるだけなんで,ソフトをそこまで信用しておらずユーザを分けて使っていた.
一方でPostgreSQLはデータ分析の仕事で自分専用のサーバを立てて使っているのでpostgresユーザでしかアクセスしたことがない.
自分で1行も書いてないソフトに,そういう使い方はちょっと心配なので設定を頑張ってみる.
ユーザを作ってログインできるようにする.
createuserのオプションはここを参照したPostgreSQL でパスワード認証を使う
sudo su - postgres # postgresになってポスグレ関連コマンドを使う
createuser -D -E -R -S -P UESRNAME
createdb DBNAME
ユーザの認証方法とかアクセス権の設定.
DBとgitbucketを同じホストで動作させる前提で.
ADDRESSのとこは,TYPEが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でログインする.
system administartionから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));