概要
redmineの障害に備え、DBのバックアップ/リストアの検証試験を行いました。
これはあくまでもDBのみでの結果です。添付ファイルやソースに関しては検討課題となります。
MySQL Dumpを行う
まずは公式サイトのように
https://redmine.jp/faq/system_management/backup/
mysqldump -u [redmineのDBユーザ] -p[DBパスワード] [DB名] > /バックアップ先のパス/backup.sql
と入力したら、以下のエラーが出てきました。
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
1つめのWarning:
[以下引用]
https://resource-sharing.co.jp/mysql-command-password-warning/
これは、「警告:コマンドラインインターフェイスでパスワード使うのは安全ではない場合があります」というメッセージで、パスワードをそのままシェルスクリプトに記述するのは望ましくない、ということです。
(中略)
このWarningは、パスワードを外部ファイルから読み出すようにすれば出なくなります。
そこで、MySQLのユーザー名とパスワードを保存したファイルを別に作成します。
外部ファイル作成
vi dbaccess.conf
ファイル内容
[client]
user = [ユーザー名]
password = [パスワード]
host = localhost
# DBの接続先。
作成後、
mysql --defaults-extra-file=dbaccess.conf
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
とログインできることを確認しました。
Warning解消後のmysqldumpエラー
この外部ファイルを用いてmysqldumpを試みましたが
mysqldump --defaults-extra-file=dbaccess.conf -h localhost redmine > ./test.sql
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
このエラーを検索したところ以下の記事に行き当たりました。
https://www.koikikukan.com/archives/2021/02/17-235555.php
MySQLを5.7にバージョンアップしたことで、PROCESS特権が必要になるようです。
テーブルスペース情報をダンプする必要がないユーザーは、-no-tablespacesオプションを指定してmysqldumpを呼び出すことにより、前述の要件を回避できます。
そこで、もう一度試します。
mysqldump --defaults-extra-file=dbaccess.conf --no-tablespaces -h [DBサーバ] [DB名] > backup.sql
今度はエラーがありません。DBのバックアップが取れたことでいよいよリストア試験を行います。
DBリストア確認
リストア前準備
まず、バックアップが取れた状況で、トップページを編集します。
↓
リストア
mysql --defaults-extra-file=dbaccess.conf redmine < [取得したバックアップsql]
sudo systemctl restart apache2
httpdサービス再起動後、
と、バックアップを取った直後に切り戻った後に戻りました。
ToDo
- 定期バックアップのスケジュールをとる
- 添付ファイルのバックアップを行う
などがありますけれど、まずはクリティカルな部分の検証が完了しました。