GitBucket のデータベース変更
前回に引き続き GitBucket の環境改善です。
組み込みの H2 データベースでは具合が悪いとのことが公式で言及されているため、
GitBucket でサポートしている MySQL に変更します。
GitBucketをPostgreSQLやMySQLで動かす - たけぞう瀕死ブログ
GitBucketは標準では内蔵のH2という組み込みデータベースで動作しますが、4.0からはH2の代わりに外部データベースとしてPostgreSQLやMySQLを使うことができるようになっています。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 ほどあるので、タイムアウトエラーが出る場合は
yum の timeout
の設定を適当に追加します。
# 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 からデータをエクスポート
- 管理者でログイン
- 右上のユーザメニューから 'System administration' を選択
- 左メニューの 'Data export / import' を選択
- チェックボックス全てにチェックを入れた状態で Export ボタンを選択
gitbucket-export-xxxxxxxx.sql
ファイルをダウンロード
上記の手順でデータが出力されます。
サービス停止
GitBucket のアプリケーションを停止します。
# systemctl stop tomcat
データのインポート
# 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
ユーザやリポジトリの情報が復旧していれば作業完了です。