データベースのバックアップ
バグレポートに関するデータはすべて MySQL のデータベースに保存されます。このデータベースをバックアップする方法について説明します。
MySQL サーバを停止してバックアップ
ディレクトリをバックアップするだけです。Bugzilla のデータを格納する bugs
データベースは、MySQL のデータディレクトリにある bugs ディレクトリをバックアップすることで保存できます。ほかにも MySQL の管理情報を記録した mysql ディレクトリも保存しておくとよいでしょう。
$ cd /var/lib/mysql $ tar zcvf /home/mysql/bz-20030903.tar.gz bugs/ mysql/
バックアップしたデータの復元も、MySQL サーバを止めてから バックアップした同じディレクトリに書き戻すだけです。
MySQL サーバを停止しないでバックアップ
mysqlhotcopy を使用します。ただしこのコマンドを使用するためには以下の方法で mysqlデータベースの SELECT 権限と MySQL の RELOAD 権限を有効にしておく必要があります。
(MySQL の rootユーザで実行するなら元からすべての権限があるので以下の権限変更は必要ありません。ここでは一般ユーザでバックアップする方法を説明します)
$ mysql -u root -p
Enter password:
mysql> use mysql;
mysql> update user set reload_priv='Y' where user='bugs';
( bugs のところは Bugzilla が使用するユーザを指定します)
mysql> grant select on mysql.* to bugs@localhost;
mysql> flush privileges;
mysql> exit;
mysqlhotcopy は以下のように使います。
$ mysqlhotcopy -u bugs -p <bugsユーザのパスワード> <バックアップするデータベース> <コピー先のディレクトリ>
たとえば以下のシェルスクリプトを実行すると /home/mysql/20030912-1700 といったディレクトリの中に bugs ディレクトリと mysql ディレクトリがコピーされます。
#!/bin/sh BACKUP_DIR=/home/mysql/`date +%Y%m%d-%H%M` mkdir -p $BACKUP_DIR mysqlhotcopy -u bugs -p passbugs bugs $BACKUP_DIR mysqlhotcopy -u bugs -p passbugs mysql $BACKUP_DIR
ソースコードから MySQL をインストールした場合、mysql コマンドの部分は代わりに /usr/local/mysql/bin/mysql に書き換えるなど、PATH を指定するようにしてください。
データベース以外で保存すべきファイル
バグレポート以外の Bugzilla 動作設定ファイルなど一部のファイルは、MySQL データベースではない場所に保存されています。以下のファイルもバックアップしておくことをすすめます。
- <bugzilla>/localconfig
- MySQL サーバと接続する ユーザ名・パスワードなど重大な内容が保存されています。
- <bugzilla>/data/params
- Web ブラウザから Bugzilla 管理者としてログインし「パラメータ」ページで設定した内容はここに保存されています。
- <bugzilla>/data/mining/<プロダクト名>
- Bugzilla トップページあるいは画面下にあるフッタから行ける「統計」ページで「出力形式 : グラフ」を選択したときの画像を作るために cron で日々記録されている統計データファイルです (cron の設定をしていないときは作られません)。
ここのファイルはプロダクト名に空白があればファイル名に空白を含むファイル名になりますし、プロダクト名が日本語であれば文字コード EUC-JP の日本語ファイル名になります。この仕様は問題かもしれません。
DB の基礎
ここでは Bugzilla を扱う上で最低限知る必要があるデータベース用語を説明します。
MySQLデータベースシステムのデータ構造について:
- データの最も大きなくくりは データベース になります。たとえば mysql データベースは MySQLユーザを管理するためなどに使用されます。 Bugzilla のデータは全部 bugs データベースに記録されます。
- データベースの中に テーブル があります。テーブルというのは縦横に線が引かれている表のことです。表計算ソフトの画面を思い出していただければよいです。
- テーブルの中に カラム (項目・列・column) があります。また 行 (row) もあります。
以下の図を見てみましょう。緑の枠で囲まれた 1つの データベース があります。その中にはテーブル が 2 つあります。そのテーブルの中に書いてある「名前」「性別」「年齢」といった項目が カラム です。Robert, Male, 11, Student という横一例の、黄色とオレンジに塗ってあるのが 行 です。
名前 | 性別 | 年齢 | 職業 |
Robert | Male | 11 | Student |
David | Male | 33 | Businessman |
Michael | Male | 55 | Columnnist |
名前 | 電話番号 | 住所 |
Robert | 123-3210 | CA |
David | 888-8887 | UT |
Michael | 456-7890 | AZ |