こんにちは!今回は、Debian系およびRedHat系Linuxで、VPSサーバー間のバックアップを自動化する方法を解説します。この記事は、rsync
を使ってリモートサーバーに手動でバックアップを覚えたばかりの初心者エンジニアの方に向けています。
手動でバックアップを行う場合、バックアップディレクトリが増えると手間がかかり、パスフレーズを何度も入力することの不便さに悩まされることがあります。この記事では、これらの問題を解決するために、rsync
を使ったサーバー間のバックアップを自動化する方法をステップバイステップでご紹介します。
バックアップはサーバー運用において非常に重要です。特に、新しく構築したVPSサーバーのデータを保護するために、効率的で確実なバックアップ方法を知りたい方にとって、このガイドは役立つでしょう。
前提条件
SSH鍵認証の設定
- バックアップ元サーバーとバックアップ先サーバーの間でSSH鍵認証が設定されていること。
- バックアップ元サーバーのユーザーのホームディレクトリにSSH秘密鍵が配置されていること。
- バックアップ先サーバーのユーザーのホームディレクトリに公開鍵が配置され、適切な権限が設定されていること。
バックアップ先サーバーのディレクトリ構造
バックアップ先サーバーに必要なバックアップディレクトリが用意されていること。 以下のようなディレクトリ構造を事前に作成します。
backup/etc/
backup/home/
backup/www/
backup/mysql/
backup/log/
rsync
のインストールと設定
- バックアップ元サーバーおよびバックアップ先サーバーに
rsync
がインストールされていること。 - 両方のサーバーで
rsync
の動作確認が完了していること
RedHat系の場合:
sudo yum install rsync -y
Debian系の場合:
sudo apt-get install rsync -y
手順
ステップ1:バックアップリストの作成
バックアップ対象のディレクトリとリモートサーバーのバックアップ先ディレクトリを指定するリストを作成します。
ファイル例: /usr/local/bin/backup_list.txt
/etc user@remote-server:/backup/etc/
/home user@remote-server:/backup/home/
/var/www user@remote-server:/backup/www/
/var/lib/mysql user@remote-server:/backup/mysql/
/var/log user@remote-server:/backup/log/
ステップ2:バックアップスクリプトの作成
バックアップリストを読み込み、rsync
を使ってバックアップを行うスクリプトを作成します。
ファイル例: /usr/local/bin/backup.sh
#!/bin/bash
# バックアップリストファイル
BACKUP_LIST="/usr/local/bin/backup_list.txt"
LOG_FILE="/var/log/backup.log"
SSH_KEY="/home/user/.ssh/id_rsa"
# バックアップリストを読み込み
while IFS=" " read -r SOURCE_DIR DEST_DIR; do
# ディレクトリが存在するか確認
if [[ -d $SOURCE_DIR ]]; then
# バックアップを実行
rsync -avz --delete -e "ssh -i $SSH_KEY" $SOURCE_DIR $DEST_DIR >> $LOG_FILE 2>&1
else
echo "Warning: $SOURCE_DIR does not exist, skipping..." >> $LOG_FILE
fi
done < $BACKUP_LIST
ステップ3:SSHエージェントの設定スクリプトの作成
SSHエージェントを起動し、パスフレーズを入力してSSHキーを追加するスクリプトを作成します。
ファイル例: /usr/local/bin/start_ssh_agent.sh
#!/bin/bash
# SSHエージェントを起動
eval "$(ssh-agent -s)"
# パスフレーズを使用してSSHキーを追加
/usr/local/bin/add_ssh_key.expect
# エージェントの環境変数をエクスポートしてbackup.shを実行
export SSH_AUTH_SOCK
export SSH_AGENT_PID
/usr/local/bin/backup.sh
ステップ4:パスフレーズを自動入力するexpectスクリプトの作成
expect
を使ってパスフレーズを自動的に入力するスクリプトを作成します。
ファイル例: /usr/local/bin/add_ssh_key.expect
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "dummy_passphrase\r"
interact
ステップ5:スクリプトのパーミッション設定
作成したスクリプトに実行権限を設定します。
sudo chmod 700 /usr/local/bin/start_ssh_agent.sh
sudo chmod 700 /usr/local/bin/add_ssh_key.expect
sudo chmod 700 /usr/local/bin/backup.sh
ステップ6:手動でスクリプトをテスト
手動でstart_ssh_agent.sh
スクリプトを実行して、正しく動作するか確認します。
sudo /usr/local/bin/start_ssh_agent.sh
ステップ7:cronジョブの設定
スクリプトが正常に動作することを確認した後、cronジョブを設定します。
例: 毎日午前2時に実行する設定
sudo crontab -e
以下の行を追加します。
0 2 * * * /usr/local/bin/start_ssh_agent.sh
バックアップ結果の確認
バックアップ先にデータが正しくコピーされているかを確認します。
ssh -i /home/user/.ssh/id_rsa user@remote-server "ls /backup/www"
まとめ
これで、Debian系およびRedHat系LinuxでVPSサーバー間のバックアップを自動化する設定が完了しました。rsync
を使ったバックアップの自動化は、データの保護にとても役立ちます。安心して運用できる環境を整えてください。