2014年03月26日
PowerCMSのバックアップを任意の日数でローテーションする
BackupConfig プラグインでのローテーション
BackupConfig プラグインは、定期的にデータベースのダンプとドキュメントルート以下のファイルバックアップを同時に行うプラグインです。
専用の Perl スクリプト tools/run-backup-sql-and-docs を実行することでバックアップが行われます。
特にローテーションする様なケースは想定していませんが、擬似的なローテーション方法として、マニュアルには以下の記述があります。
SQLファイルのバックアップ先
バックアップファイルの保存先を絶対パスで記述します。同名のファイルが既に存在する場合は上書きされます。パスの指定には MT タグが使用できます。例えば、
/tmp/<mt:date format="%Y%m%d%H%M%S">.sqlと指定した場合、/tmp/20090219000000.sql のようにバックアップ時刻をファイル名に含めることができます。また、
/tmp/<mt:date format="%a" language="en">.sqlのように曜日を指定することで、/tmp/Mon.sql のような曜日毎のバックアップファイルが作成されるため、毎日1回実行することで一週間分のローテーションでバックアップが可能です。
これを任意の日数でローテーションさせる方法を説明します。
最終バックアップの値を使いローテーションを実施する
任意日数でのローテーションは、特定の日時から何日経過しているかを求め、その値をローテーション数で割った余りをファイル名とすることで実現できます。
ただし、上記例のようにMTDateを利用した場合、日付の比較などはできますが、特定の日時より何日経過しているかを取得するようなことが出来ません。
今回はBackup Configの実行時に記録される、「最終バックアップ」の値を利用します。
「最終バックアップ」の値は UNIX時間で保存されます。これは1970年1月1日午前0時0分0秒から何秒経過したものかを表すもので、この秒数で前回のバックアップスクリプト実行時間を記録しています。
前提条件
- 最終バックアップの実施時間を元にファイルを生成します
- 一日一回のバックアップ実行を想定しています
- 同日に2度以上バックアップを行った場合、翌日用のバックアップが生成されます(翌日の定期実行時に上書きされます)
- 順次上書きを行なってしまうため、差分バックアップは意味を持ちません(差分バックアップのチェックは外してください)
解説
<MTPluginSetting component="BackupConfig" name="last_backup" setvar="lastbk">
「最終バックアップ」の値を取得します。先述した様に UNIX 時間なので、加工のために変数に保存します。
MTPluginSettingはプラグインの設定した値を取得する為のPowerCMSのテンプレートタグです。
<mtvar name="lastbk" op="/" value="86400" regex_replace="/\..*$/","" setvar="lastdays">
保存した値を86400で割り小数点以下を切り捨てて、1970年1月1日からの経過日数を取得し、変数に保存します。
<mtvar name="lastdays" op="mod" value="3" _default="3">
さらにこれを分割数で割った余りを求めます。なお最終バックアップの値は、一度もバックアップスクリプトが動作していない、またはプラグイン設定の初期化を行った場合には、保持していませんので、そのケースでは _default モディファイアで「3」になるようにしています。
この値をファイル名にすることで、ローテーションが可能になります。
下記は3日毎にローテーションする例です。見やすくするために改行されていますが、実際には1行で記述してください。
/tmp/backup/<MTPluginSetting component="BackupConfig" name="last_backup" setvar="lastbk"> <mtvar name="lastbk" op="/" value="86400" regex_replace="/\..*$/","" setvar="lastdays"> <mtvar name="lastdays" op="mod" value="3" _default="3">.sql
SQLファイル用の指定ですので、最後の拡張子部分をzipに変更し、ドキュメントルートのバックアップ先欄にも反映してください。
プラグインを利用し現在の日時からファイル名を作成する
現在の日時を Unix Time で取得することは、簡単なプラグインで実現できます。
この様なプラグインを利用すれば、「最終バックアップ」の値ではなく実行日時で、保存ファイル名を生成することが出来ます。
- カテゴリー
- プラグイン
コメントを投稿する