GitBucket のデータベース変更

前回に引き続き GitBucket の環境改善です。

組み込みの H2 データベースでは具合が悪いとのことが公式で言及されているため、
GitBucket でサポートしている MySQL に変更します。

GitBucketをPostgreSQLやMySQLで動かす - たけぞう瀕死ブログ

GitBucketは標準では内蔵のH2という組み込みデータベースで動作しますが、4.0からはH2の代わりに外部データベースとしてPostgreSQLMySQLを使うことができるようになっています。H2はデータの保全性に問題がありますので業務等の重要な用途にGitBucketを使われるのであればなるべくPostgreSQLもしくはMySQLを利用することが望ましいです(パフォーマンス面でもメリットがあります)。

基本的にはリンク先の通りの内容で問題なく解決できますが、
DB 側の設定をしていなかったので MySQL の導入から進めていきます。


検証環境

MySQL セットアップ

インストール

# yum install https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# yum --enablerepo=mysql57-community -y install mysql-community-server

サイズが 200 MB ほどあるので、タイムアウトエラーが出る場合は
yumtimeout の設定を適当に追加します。

# vi /etc/yum.conf
timeout=3600

デフォルトでは一部の文字コードが latin1 になってしまうため、データベースやテーブルを作成する前に設定を追記します。

# vi /etc/my.cnf

[mysqld]
character-set-server = utf8

[client]
default-character-set = utf8

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

インストールと文字コード設定が完了したら mysqld を起動します。

# systemctl start mysqld
# systemctl enable mysqld

MySQL 設定変更

MySQL の初回起動後は root ユーザのパスワードが仮設定され、
ログに仮パスワードが出力されます。

# cat /var/log/mysqld.log | grep 'temporary password'
2017-10-20T04:25:29.312034Z 1 [Note] A temporary password is generated for root@localhost: Uo7hApMhqg(k

パスワードとして Uo7hApMhqg(k が設定されていることが分かりましたので、
この情報を元に初回ログインと設定変更をします。

また、パスワードポリシーはデフォルトで MEDIUM に設定されていて、
数字, 小文字, 大文字, 記号 の4種がそれぞれ1つずつ含まれている必要があるようです。

MEDIUM policy adds the conditions that passwords must contain at least 1 numeric character, 1 lowercase character, 1 uppercase character, and 1 special (nonalphanumeric) character.

初回設定をしていきます。

# mysql_secure_installation
Enter password for user root: Uo7hApMhqg(k

New password: (root パスワードを入力)
Re-enter new password: (root パスワードを再入力)

Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

mysql コマンドでログインし、プロンプトに変わったらログイン成功です。

# mysql -u root -p
Enter password: (先ほど設定した root パスワード)

mysql>

データベースとユーザの作成

GitBucket 用のデータベースとユーザを作成し、権限を付与して反映させます。
ここではパスワードを P@ssw0rd として作成しているので、適宜変更してください。

> CREATE DATABASE gitbucket;
Query OK, 1 row affected (0.02 sec)

> CREATE USER 'gitbucket'@'localhost' IDENTIFIED BY 'P@ssw0rd';
Query OK, 0 rows affected (0.02 sec)

> GRANT ALL PRIVILEGES ON gitbucket.* TO 'gitbucket'@'localhost';
Query OK, 0 rows affected (0.01 sec)

> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

H2 データベースからデータを抽出

前回の検証時に組み込みの H2 データベース上にユーザを登録してしまったため、
一旦 H2 からデータをエクスポートします。

最初から MySQL で構築を始める場合、この項目は飛ばしてください。

GitBucket からデータをエクスポート

  1. 管理者でログイン
  2. 右上のユーザメニューから 'System administration' を選択
  3. 左メニューの 'Data export / import' を選択
  4. チェックボックス全てにチェックを入れた状態で Export ボタンを選択
  5. gitbucket-export-xxxxxxxx.sql ファイルをダウンロード

上記の手順でデータが出力されます。

サービス停止

GitBucket のアプリケーションを停止します。

# systemctl stop tomcat

データのインポート

先ほどの .sqlMySQL に直接読み込ませます。

# mysql -u gitbucket -p < gitbucket-export-xxxxxxxx.sql
Enter password: P@ssw0rd

データベース接続設定変更

GitBucket のデータベース接続設定ファイルを編集します。

# vi /usr/share/tomcat/.gitbucket/database.conf

db {
  url = "jdbc:mysql://localhost/gitbucket?useUnicode=true&characterEncoding=utf8"
  user = "gitbucket"
  password = "P@ssw0rd"
}

設定が完了したらもう一度 GitBucket を起動します。

# systemctl start tomcat

ユーザやリポジトリの情報が復旧していれば作業完了です。

参考サイト