Memo

メモ > サーバ > 構築: 管理ツール設定 > rdiff-backup

■rdiff-backup
※Pythonで書かれた逆差分形式のバックアップツール。インストールや設定が比較的容易 外部のサーバへバックアップすることもできる。バックアップ時の通信にはSSHが使われる ※duplicityという、rdiff-backupの派生ツールも良いらしい また、duplicityをより手軽に扱うためのduplyというツールもあるらしい ■インストール ※この例ではrootアカウントでバックアップを行うものとする バックアップは外部のバックアップ用サーバ( backup.refirio.net )に行うものとする バックアップ用サーバでは、SSHでの管理用ユーザ「admin」とrdiff-backupでのバックアップ用ユーザ「backup」があるものとする 一旦 /root/rdiff-backup/ 内にバックアップを作成し、それをrdiff-backupでバックアップするものとする ※公開フォルダの一つ上の階層にログなどのバックアップを作成し、一つ上の階層を丸ごとバックアップするのも有効? ※バックアップ時のSSHでは使用できるコマンドを制限するのも有効
# yum install rdiff-backup … rdiff-backupをインストール
rdiff-backup でリモートバックアップする(基本的な使い方が書かれている) http://www.usupi.org/sysad/154.html rdiff-backup をもう少し使いこなす(鍵認証とパスワードの省略について書かれている) http://www.usupi.org/sysad/155.html rdiff-backupのリモートバックアップで、SSHのコマンドを制限したい http://www2.filewo.net/wordpress/2012/05/30/rdiff-backup%E3%81%AE%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%8... ■ローカルバックアップ動作確認
# mkdir /root/mydata … テスト用ディレクトリを作成 # echo test1 > /root/mydata/test1.txt … テスト用ファイルを作成 # rdiff-backup /root/mydata /root/mydata-backup … rdiff-backupでバックアップを実行 # ls /root/mydata-backup … バックアップの内容を確認 # echo test2 > /root/mydata/test2.txt … 追加でファイルを作成 # mkdir /root/mydata/test … 追加でディレクトリを作成 # rdiff-backup /root/mydata /root/mydata-backup … rdiff-backupでバックアップを実行 # ls /root/mydata-backup … バックアップの内容を確認 # rdiff-backup -l /root/mydata-backup … バックアップの履歴を確認する場合 increments.2018-01-28T05:45:03+09:00.dir Sun Jan 28 05:45:03 2018 increments.2018-01-29T05:45:04+09:00.dir Mon Jan 29 05:45:04 2018 increments.2018-01-30T05:45:03+09:00.dir Tue Jan 30 05:45:03 2018 〜中略〜 increments.2018-03-28T17:20:54+09:00.dir Wed Mar 28 17:20:54 2018 increments.2018-03-28T17:20:58+09:00.dir Wed Mar 28 17:20:58 2018 increments.2018-03-28T17:21:59+09:00.dir Wed Mar 28 17:21:59 2018 # rdiff-backup -r now /root/mydata-backup /root/mydata-restore … 最新のバックアップから復元する場合 # rdiff-backup -r 1D /root/mydata-backup /root/mydata-restore … 1日前のバックアップから復元する場合 # rdiff-backup -r 1D /root/mydata-backup/data.sql /root/mydata-restore/data.sql … 特定のデータのみ復元する場合 # rdiff-backup -r 2018-03-28T17:21:59+09:00 /root/mydata-backup /root/mydata-restore … 特定の日時から復元する場合
■リモートバックアップ準備 ※PostgreSQLのデータをバックアップする場合、rootからパスワード入力なしでpg_dumpを実行できるようにする ※PostgreSQLにrootを作成し、パスワード入力を省略するためのファイルも作成しておく必要がある
# su - postgres … postgresユーザになる -bash-4.1$ createuser webmaster … DBユーザー「root」を新規登録 # vi /root/.pgpass … PostgreSQLパスワードファイルを作成
#ホスト名:ポート番号:データベース名:ユーザー名:パスワード localhost:5432:dbname:username:XXXXX
# chmod 600 /root/.pgpass … rootからのみ読み込めるようにする # pg_dump dbname > /root/pg_dbname.sql … pg_dumpをテスト実行
■リモートバックアップ通信準備 ☆バックアップ用サーバで作業
# mkdir /home/backup/refirio.net … あらかじめバックアップ用ディレクトリを作成 # chown backup. /home/backup/refirio.net … 権限を設定 # vi /etc/sysconfig/iptables … ファイヤーウォールを設定(バックアップ元サーバからのアクセスを許可する / iptablesを使用している場合の設定)
☆バックアップ元サーバで作業
# ssh backup@backup.refirio.net … 一旦バックアップ先へのSSH接続を確認 # ssh-keygen -t rsa … バックアップ元からバックアップ先にSSH接続するための鍵を作成 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): … 空Enter(デフォルトの場所に作成) Enter passphrase (empty for no passphrase): … 空Enter(パスワード無しの鍵を作成) Enter same passphrase again: … 空Enter Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 1d:98:e7:f1:6d:04:1c:30:fd:69:c7:b7:3b:6d:e6:40 root@refirio.net The key's randomart image is: +--[ RSA 2048]----+ | o+o. | | o .o. | | o + ..o | | + + o+ +| | S o ..E.o| | o . | | . o| | ++| | +o| +-----------------+ # ll /root/.ssh/ … 鍵(id_rsa と id_rsa.pub)の作成を確認 合計 12 -rw------- 1 root root 1675 4月 8 18:09 2015 id_rsa -rw-r--r-- 1 root root 396 4月 8 18:09 2015 id_rsa.pub -rw-r--r-- 1 root root 826 4月 8 10:55 2015 known_hosts # vi /root/.ssh/id_rsa … 秘密鍵の内容を確認
-----BEGIN RSA PRIVATE KEY----- MIIEoQIBAAKCAQEAyhAl43U62F5m7i3qv/qiXyANsiE8kZeyXyMcDZnpeguwhRxx 〜略〜 FcSQ5vshGerkb6Aogd0lTsT16WVHW2UPRv0Jef7FTWDaP/BV9w== -----END RSA PRIVATE KEY-----
# vi /root/.ssh/id_rsa.pub … 公開鍵の内容を確認(アカウントとドメインが記入されているのを確認)
ssh-rsa AAAA〜略〜gzw== root@refirio.net
☆バックアップ用サーバで作業
# vi /home/backup/.ssh/authorized_keys … 作成した公開鍵の内容を入力(すでに鍵ファイルがあれば、ファイルの最後に追記)
ssh-rsa AAAA〜略〜gzw== root@refirio.net
☆バックアップ元サーバで作業
# ssh -i /root/.ssh/id_rsa backup@backup.refirio.net … 秘密鍵を使って、パスワードなしで、バックアップ先へのSSH接続を確認
■リモートバックアップ構築 ※シェルスクリプトの内容は、必要に応じて調整する ※シェルスクリプトとして実行する前に、あらかじめ一つ一つのコマンドを叩いてテストする ※一度もバックアップを行っていないと、バックアップの復元はエラーになる
# mkdir /root/rdiff-backup … バックアップ用一時ディレクトリを作成 # vi /root/rdiff-backup.sh … バックアップ用スクリプトを作成
#!/bin/sh #システムファイルをバックアップ tar cfz /root/rdiff-backup/log_backup.tar.gz -C /var log tar cfz /root/rdiff-backup/etc_backup.tar.gz -C / etc #MySQLをバックアップ mysqldump -u username -pXXXXX dbname --default-character-set=binary > /root/rdiff-backup/mysql_dbname.sql #PostgreSQLをバックアップ pg_dump dbname > /root/rdiff-backup/pg_dbname.sql #rdiff-backupにある1ヶ月以上前のバックアップを削除 rdiff-backup --remote-schema 'ssh -i /root/.ssh/id_rsa -C %s rdiff-backup --server' --force --remove-older-than 1M backup@backup.refirio.net::refirio.net #rdiff-backupにバックアップを作成 rdiff-backup --remote-schema 'ssh -i /root/.ssh/id_rsa -C %s rdiff-backup --server' /root/rdiff-backup backup@backup.refirio.net::refirio.net #一時的なバックアップファイルを削除 rm -f /root/rdiff-backup/*
■リモートバックアップから復元テスト&シェルスクリプト実行テスト&自動実行
# rdiff-backup -r now --remote-schema 'ssh -i /root/.ssh/id_rsa -C %s rdiff-backup --server' backup@backup.refirio.net::refirio.net /root/rdiff-backup-restore … 最新のバックアップから /root/rdiff-backup-restore に復元テスト # chmod 700 /root/rdiff-backup.sh … バックアップ用スクリプトに権限を与える # /root/rdiff-backup.sh … バックアップ実行テスト # vi /etc/crontab … バックアップ用スクリプトをcronに登録(毎朝5時に実行する場合)
0 5 * * * root /root/rdiff-backup.sh
リモートのバックアップサーバにSSHでログイン後、以下のようにして直接取得する方法もある
# rdiff-backup -r now /root/mydata-backup /root/mydata-restore … 最新のバックアップから復元する場合
■バックアップ用シェルスクリプト例
# vi /root/rdiff-backup.sh
#!/bin/sh #システムファイルをバックアップ tar cfz /var/www/vhosts/main/backup/log_backup.tar.gz -C /var log tar cfz /var/www/vhosts/main/backup/etc_backup.tar.gz -C / etc #MySQLをバックアップ mysqldump -u refirio_db -pPNBgxJWM5N members --default-character-set=binary > /var/www/vhosts/main/backup/mysql_members.sql #PostgreSQLをバックアップ pg_dump members_pos > /var/www/vhosts/main/backup/pg_members_pos.sql #rdiff-backupにある古いバックアップを削除 rdiff-backup --remote-schema 'ssh -i /root/.ssh/id_rsa -C %s rdiff-backup --server' --force --remove-older-than 30D backup@backup.example.com::refirio.net #rdiff-backupにバックアップを作成 rdiff-backup --remote-schema 'ssh -i /root/.ssh/id_rsa -C %s rdiff-backup --server' /var/www/vhosts/main backup@backup.example.com::refirio.net #一時的なバックアップファイルを削除 rm -f /var/www/vhosts/main/backup/*

Advertisement