Amazon S3での増分バックアップの迅速な実装

共有ホスティングからクラウド内の仮想サーバーにサイトを移動した後、データアーカイブの問題が浮上しました。ホストが毎日のバックアップを心配していた場合、これらの懸念は完全に管理者が負担しました。 サーバーに大きなアーカイブを保存することは安全ではないだけでなく(場合によっては)高価になるため、大部分のファイルをAmazonのS3サービスにコピーすることにしました。 猫の下で、増分バックアップを実装する私の方法を説明します。 この方法は非常にヌボフスキーですが、簡単に繰り返したい人は、ニーズに合わせて微調整する方法を見つけるでしょう。



まず、タスクを決めましょう



必要なもの:

1. Webサーバー(サイトディレクトリとデータベース)の毎日のアーカイブを作成します。 先月のアーカイブを保持する必要があります。

2.増分アーカイブを作成します-ディスク容量を節約します。 毎週完全なアーカイブを作成し、変更されたファイルの6つのアーカイブを作成して、サイクルを繰り返します。

3.アーカイブのコピーをサードパーティのサーバー(Amazon S3)に保存します。 ローカルサーバーでは、1週間アーカイブを残し、残りのアーカイブはサーバー上にのみ存在します。

私のサーバーはDebianを実行しています。他のオペレーティングシステムの場合、インストールコマンドとファイルパスを適切に修正する必要があるかもしれません。



必要なコンポーネント



backupninja :プログラムは他のユーティリティの便利なラッパーとして機能し、アーカイブプロセスを集中管理できます。

インストール:apt-get install backupninja



重複 :増分バックアップを作成するためのユーティリティ。 リモートサーバーで作業できます。

インストール:apt-get install duplicity



boto :アマゾンウェブサービスAPI 重複によってAWS S3に直接アーカイブするために使用されます

インストール:apt-get install python-boto



s3cmd :コマンドラインからAmazon S3サービスを操作するためのユーティリティ。

インストール:apt-get install s3cmd



実装



AWSに登録することから始める必要があります。 このプロセスには問題はありません。maxoutについては、トピック「 Amazon S3での高速バックアップの実装」で 詳しく説明されています 。 ウリュピンスクでは、登録はスベルバンクの地方支部の地図で大々的に行われました。これは、他の都市や村では問題がないことを意味します。



次に、backupninjaを構成します。 プログラムのメイン構成ファイルは/etc/backupninja.confであり、ファイル内のすべてのオプションは明らかであり、ここに持ってくる意味はありません。 最も単純なケースでは、ログのレベル(致命的なエラーからデバッグ情報まで)と、管理者のメールに送信される完了したタスクのレポートの構成を設定しない限り、そこで何も変更する必要さえありません。



Backupninjaは、個々のジョブの設定を/etc/backup.dディレクトリ内の個別のファイルに保存します(デフォルト)。 ファイル名の前には、ジョブの実行順序を指定する数値プレフィックスが付きます。 プレフィックスがなく、プレフィックスが0のファイル内のジョブは実行されません。 同じプレフィックスを持つファイル内のジョブは並行して実行され、前のプレフィックスよりも大きいプレフィックスを持つ各ジョブは、より小さいプレフィックスを持つジョブが完了した後に実行されます。 このように、ファイルプレフィックスを設定することにより、タスクのシーケンスを制御できます。



プレフィックスに加えて、タスクファイルには、タスクのタイプに対応する拡張子が必要です。



Backupninjaには、ninjahelperジョブ構成を構成およびテストするためのシェルがあります。 タスクの作成と編集は、テキストエディターやシェルからのテストの方が便利だと思います。



したがって、データベースバックアップジョブの構成ファイル。 2つのステップでデータベースをアーカイブします。最初に、すべてのデータベースをダンプし、次にダンプから増分アーカイブを作成します。 ステップ1、ファイル20-all.mysql(ファイルのブランクを/ usr / share / docs / backupninja / examplesからコピーし、必要な変更を加えました)

  ### backupninja MySQL構成ファイル###

 #hotcopy = <yes |  no>(デフォルト= no)
 #mysqlhotcopyを使用して、実際のデータベースバイナリファイルのバックアップを作成します。
 hotcopy = no

 #sqldump = <yes |  no>(デフォルト= no)
 #mysqldumpを使用してバックアップを作成します。 これにより、SQLコマンドでテキストファイルが作成されます
 #データベースを再構築するのに十分です。
 #
 sqldump = yes

 #sqldumpoptions = <オプション>
 #(デフォルト= --lock-tables --complete-insert --add-drop-table --quick --quote-na
 #mysqldumpに渡す引数
 #sqldumpoptions = --add-drop-table --quick --quote-names

 #compress = <yes |  no>(デフォルト= yes)
 #はいの場合、sqldump出力を圧縮します。
圧縮=はい

 #dbhost = <host>(デフォルト= localhost)

 #backupdir = <dir>(デフォルト:/ var / backups / mysql)
 #バックアップをダンプする場所。 ホットコピーのバックアップはサブディレクトリにあります
 # 'hotcopy'およびsqldumpバックアップはサブディレクトリ 'sqldump'にあります
 backupdir = / home / backups / mysql

 #データベース= <all |  db1 db2 db3>(デフォルト=すべて)
 #バックアップするデータベース。 単語「all」またはa
 #データベース名のスペース区切りリスト。
データベース=すべて

ユーザー=ルート 


構成では、次のことを示しました。

-mysqldumpを使用してダンプする必要があります。

-ダンプは圧縮する必要があります。

-圧縮ファイルをディレクトリ/ home / backups / mysqlに保存します

-すべてのデータベースをバックアップする必要があります



タスクを完了すると、gzipで圧縮されたデータベース名を持つファイルが/ home / backups / mysqlディレクトリに表示されます。



次のタスクは、ファイル30-databases.dupの重複を使用して増分データベースアーカイブを実行することです(変更したオプションのみをリストします。構成ファイルを/usr/share/docs/backupninja/examples/example.dupから完全にコピーして、彼、そうでなければタスクは完了しません)

  ##重複の追加オプション
 ##アーカイブを暗号化しません。ボリュームサイズを512メガバイトに増やします。 
 ##重複キャッシュのパスと名前を設定
 options = --no-encryption --volsize 512 --archive-dir / home / backups / duplicity --name vds1.databases

 ##一時ディレクトリ。  backupninjaがディスク上で必要とすることに注意してください 
 ##ボリュームのサイズ以上の空きスペース
 tmpdir = / home / backups / tmp

 [ソース]
 ##バックアップに含めるもの。 各行に1つずつ、複数のソースを指定できます
 include = / home / backups / mysql / sqldump

 ##アーカイブから何かを除外する必要がある場合は、ここに示します
 #exclude = /www/urup.ru/sxd/backup

 [dest]
 ##増分バックアップ(これはデフォルト値です)
増分=はい

 ##完全バックアップを再度作成する前に増分バックアップを実行する日数
増分= 7

 ##バックアップを保存する日数。 過去7日間、ローカルサーバーにアーカイブを保存します。
キープ= 7

 ##バックアップを配置する場所。 重複は異なるサービスに保存できますが、
 ## AWSに直接含めるが、アーカイブの一部を
 ##ローカルドライブ、Amazonにファイルをコピーします 
 ##別のタスクで
 desturl = file:/// home / backups / mysql 


繰り返しますが、構成ファイルの変更された行のみを引用したことに注意してください。 タスクが機能するためには、設定を/usr/share/docs/backupninja/examples/example.dupから完全にコピーし、このファイルに必要な変更を加える必要があります。



同様に、Webサーバーのディレクトリをアーカイブするタスクを実行します。 アーカイブに含める複数のソースと除外する複数のソースを、構成の行ごとに1つずつ指定する可能性を忘れないでください。 各サイトを個別のタスクでアーカイブし、各アーカイブを個別のディレクトリに配置し、サイト名を/ home / backups / files / www /



アーカイブを作成するときに、これが重要な場合は、GnuPGを使用してファイルを暗号化できます。 この場合、-no-encryptionオプションを削除する必要があります。



最後のタスクは、作成されたアーカイブファイルをAWS S3サーバーにコピーします。 このファイルは50-upload.shと呼ばれ、通常のシェルスクリプトです。

  #!/ bin / sh

 #アーカイブのローカルコピーをAmazonのコピーと同期する
 s3cmd sync \
  --bucket-location = EU \
  --exclude 'sqldump / *' \
  /ホーム/バックアップ/ファイル\
  /ホーム/バックアップ/ mysql \
  s3://vds1.backup

 #Amazonで30日以上経過したアーカイブを削除する
複製--no-encryption --s3-use-new-style --archive-dir / home / backups / duplicity --name vds1.databases.s3 --force remove-older-than-than-30D s3 + http:// vds1 .backup / mysql 


重複がAmazonサービスで正しく機能するためには、botoをインストールして構成する必要があります。 構成では、/ etc / boto.cfgファイルで資格情報を指定します

  [資格情報]
 aws_access_key_id = *
 aws_secret_access_key = * 




アーカイブからの回復



アーカイブに関する情報を取得します。

 重複--no-encryption --s3-use-new-style collection-status s3 + http://vds1.backup/mysql 




ローカルアーカイブを解凍します。

 重複-暗号化なしファイル://// home / backups / mysql / home / backups / mysql / sqldump 


最初のパラメーターはアーカイブURL、2番目のパラメーターはファイルが解凍されるディレクトリーです。 --forceオプションが指定されない限り、既存のファイルは上書きされません



Amazonサーバーからアーカイブを解凍します。

 重複--no-encryption --s3-use-new-style s3 + http://vds1.backup/mysql / home / backups / mysql / sqldump 




アーカイブから1つのファイルを抽出します。

 複製--no-encryption --file-to-restore home / backups / mysql / sqldump / mysql.sql.gz --force file:/// home / backups / mysql / home / backups / mysql / sqldump / mysql1 sql.gz 


解凍するファイルは、-file-to-restoreキーと完全な相対パス(先頭のスラッシュなし)で示されます。 最初のパラメーターはアーカイブURL、2番目は解凍されたファイルへのフルパスです。 ファイルが既に存在する場合、-forceオプションが指定されていない限り、上書きされません。



All Articles