春雨日記 about me tags

SQLiteでお手軽運用していたGiteaのデータベースをMySQLに移行しました。

はじめに

当初GitHubアカウントを持っていなかった事や、とんでもないコミット数を誇るlinux-stableのレポジトリを抱えている事もあってGiteaを自前Gitサーバーとして利用しています。

しかし、元々開くのに1分ぐらいかかっていたlinux-stable-dsm232がここ最近まったく開けなくなってしまい、ついにSQLite運用の限界が見えてしまったため、高速化してくれる事を願ってMySQL(MariaDB)に移行する事を決意しました。

手順

  1. MySQLでユーザとデータベースを作成
  2. Giteaのdump機能でMySQL向けSQLファイルを出力する
  3. MySQLでインポート
  4. Giteaのデータベース設定を変更

つまり、動作しているGiteaが必要です。

SQLiteのdbから直接変換することも試みましたが、構造が違うので変換がうまく行きませんでした。

MySQLでユーザとデータベースを作成

MySQLは予め設定しておいてください

mysql -u root -pにて

1
2
3
4
CREATE USER 'gitea'@'localhost' IDENTIFIED BY 'gitea';
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_unicode_ci';
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea';
quit

Giteaのdump機能でMySQL向けSQLファイルを出力する

1
2
cd /tmp
sudo -u gitea gitea dump -d mysql -c /etc/gitea/app.ini

-dオプションで出力先に合わせて変換してくれます。

/tmpはgiteaユーザが書き込める場所ならどこでも大丈夫ですが、dumpをgiteaの動作ユーザで実行する必要があります。

MySQLでインポート

1
2
3
4
5
# SQLの取り出し
unzip -p /tmp/gitea-dump-********.zip gitea-db.sql > gitea-db.sql
# インポート
mysql -u gitea -p giteadb < gitea-db.sql
# 時間がかかります。

Giteaのデータベース設定を変更

[database]
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; ; Database to use. Either "mysql", "postgres", "mssql" or "sqlite3".
; ;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; ; MySQL Configuration
; ;
DB_TYPE  = mysql
; can use socket e.g. /var/run/mysqld/mysqld.sock
HOST     = 127.0.0.1:3306
NAME     = giteadb
USER     = gitea
PASSWD   = `gitea`
CHARSET  = utf8mb4
1
systemctl restart gitea

で正常に動作すればOKです。

おわりに

最初開いた感じはイマイチ変わってない気がするのですが、デーモンで動いているためキャッシュが効くことを信じています…

しばらくはGitea側でキャッシュされているっぽくてすぐ比較できないんですよね。