DropboxというとクライアントのPCにインストールして使うものというイメージがあると思いますが、サーバにインストールしてサーバ上のファイルをバックアップするのに使うのも便利です。この記事では、個人で使うVPSなどで自動バックアップにDropboxを使う方法を説明します。
今回やること
- Dropboxのインストール
- 定期的な自動バックアップの設定
Dropboxのインストールでは、GUIのないCLI環境にDropboxをインストールし、操作できるようにします。
定期的な自動バックアップの設定では、シェルスクリプトとcronを用いて自動的にバックアップが作成されるようにします。また、MySQL、GitおよびSubversionを例にバックアップを行ってみます。
環境
この記事の内容はUbuntu Server 10.04の環境で確認しました。
Dropboxのインストール
インストール部分はほぼこちらのままの方法で行いました。
ダウンロード
バイナリが公開されているのでダウンロードして展開するだけでインストールできます。
起動
これだけでは自動的に起動する状態ではありませんが、初回は認証が必要なので手動で起動します。
しばらくすると以下のようなメッセージが表示されるので、ブラウザでメッセージで示されたURLにアクセスします。アクセスするのは他のマシンからでOKです。
LAN Syncの無効化
DropboxにはLAN内のマシンとP2Pで同期する機能が実装されており、デフォルトで有効になっています。この機能はVPSでは意味が無いだけでなく、ほかのマシンに対してUDPのパケットを送信し続けるという問題があるため、無効化しておきます。
起動スクリプトの配置
起動や終了を行うためのスクリプトを用意します。
DROPBOX_USERSには利用するユーザをスペース区切りで記述します。
操作スクリプトのインストール
ここまでで~/Dropbox以下が勝手に同期される環境が構築できましたが、状態を確認したり設定することができません。そこで、操作用のスクリプトをインストールします。以下の例では~/binに置いていますが、適当にパスの通ったところに置いてください。
同期するディレクトリの設定
Dropboxには同期するディレクトリを指定する機能があるので、容量に限りのあるVPSなどでも無駄にディスク領域を奪われることはありません。同期の対象を操作するときはdropbox excludeコマンドを利用します。
以下の例では、dropbox exclude addコマンドを利用してサーバに置く必要のないディレクトリを同期の対象から外しています。
他にも同期対象を設定するコマンドとして以下のようなものが利用可能です。
定期的な自動バックアップの設定
~/Dropboxディレクトリ以下にバックアップしたいファイルを置けばとりあえずバックアップできますが、手作業でやるのはあり得ないので自動化します。
バックアップを行うスクリプト
今回は日付をファイル名としてバックアップを作成していき、ある程度古くなったら削除するようにします。
スクリプトの雛形は以下のようになります。コメントの部分でバックアップファイルを生成し、その後更新日時が古いファイルをfindコマンドで探して削除しています。
Dropboxには履歴管理の機能もあるので、単純に上書きしていけば問題なかったですね。
ただ、直接Dropboxのディレクトリに出力してしまうとファイルが作成された瞬間のファイルサイズ0の状態が履歴に残ってしまうので、まず/tmp以下に出力してからDropboxの管理下に移動するようにしています。
MySQLデータベースのバックアップ
MySQLのデータベースをバックアップする方法はいくつかありますが、小規模なデータベースであればmysqldumpコマンドを利用するのが簡単なようです。
パスワードを書き込む必要があるのが気になるので、一応パーミッションを700にして他のユーザに読まれないようにしています。もっとよい方法があれば教えていただけるとうれしいです。
Gitリポジトリのバックアップ
Gitのリポジトリはtarで固めるだけでバックアップできます。
Subversionリポジトリのバックアップ
Subversionのリポジトリはsvnadmin dumpコマンドでダンプすることでバックアップできます。
cronの設定
最後に、作成したスクリプトが定期的に自動実行されるよう設定します。以下の例では4時ちょうどにMySQL、5分後にGit、さらに5分後にはSubversionのバックアップを実行するように設定しています。
参考
追記
- 2010/04/01
- 削除するファイルがないときにrmコマンドがエラーになるので、xargsの引数に—no-run-if-emptyを追加してrmコマンドが実行されないように変
- LAN Syncの無効化について追記
- 2010/04/02