SSHを介したrsyncの使い方
rsyncは「リモート同期」を意味し、ローカルシステムやリモートマシン間でディレクトリを同期するための強力なコマンドラインユーティリティです。ほぼすべてのLinuxシステムにデフォルトで組み込まれているため、ユーザーはsshを介したrsync通信/バックアップを実行できます。
バックアップツールは多数存在し、使用方法も様々ですが、なぜrsyncを使うのでしょうか?たとえば、gzipとftpを使用してウェブサイトのローカルコピーを作成することも可能です。このアプローチにはいくつかの欠点があります。例えば、データはインターネットを介して暗号化されずに転送され、前日にコピーしたデータを転送している可能性が高いです。
暗号化されていない転送の問題を解決するために、ftpの代わりにscpを使用することができます。しかし、今回は転送時間がさらに長くなるでしょう。scpはバックアップインターネット接続用の暗号化されたトンネルを作成するための追加のオーバーヘッドを生成するからです。同じデータの重複して転送するのを防ぐために、rsyncを使用できます。
rsyncをssh、圧縮、bash、cronと組み合わせることで、究極のバックアップツールを作成できます。このチュートリアルでは、Linuxでの増分バックアップのためにssh経由でrsyncを使用する方法を紹介します。
このチュートリアルでは、あなたは学びます:
- SSHを介したrsyncの使い方
- Bashでrsyncバックアップスクリプトを作成する方法
- MySQLディレクトリをバックアップするためのrsyncの使用方法
- cronで自動rsync更新をスケジュールする方法
パスワードレスSSH
この時点で、パスワードなしのSSHログインを作成する必要があります。これを行うことで、バックアップを行う際にパスワードを入力する必要がなくなります。この方法で、バックアッププロセスを完全に自動化することができます。このチュートリアルに従って、パスワードなしでサーバーにSSHログインしてください。
rsyncのインストール
おそらく、あなたのシステムには既にrsyncがインストールされているでしょう。しかし、万が一あなたのディストリビューションにデフォルトで含まれていない場合や、以前にそのツールを削除した場合は、以下の適切なコマンドを使用して、システムのパッケージマネージャーを使ってrsyncをインストールできます。
Ubuntu、Debian、およびLinux Mintにrsyncをインストールするには:
sudo apt install rsync
Fedora、CentOS、AlmaLinux、Red Hatにrsyncをインストールするには:
sudo dnf install rsync
Arch LinuxとManjaroにrsyncをインストールするには:
sudo pacman -S rsync
sshを通じてrsyncを使用してバックアップを作成する
rsyncとSSHがインストールされていると、これらのツールを使用して増分バックアップを作成できます。以下に、どのように行うかのいくつかの例を示します。もちろん、コマンドラインオプションを追加したり削除したりすることで、これらのコマンドを自分のニーズに合わせて調整できます。
ほとんどのユーザーがコマンドに含めることを好む2つのオプションは、
-a(アーカイブ)と-v(詳細表示)です。これらとともに、-e sshオプションを指定して、rsyncにSSH経由でリモートシステムに接続するよう指示する必要があります。最も基本的な構文は以下のようになります。rsync -av -e ssh /src/ user@remote:/path/to/dstリモートサーバーがデフォルトのポート(22)とは異なるポートでSSH接続を受け付けている場合、rsyncがそのポートに接続するように指示するために以下のコマンドの構文を使用できます。この例では、SSHがポート2200で実行されていると仮定しています。
rsync -av -e 'ssh -p 2200' /src/ user@remote:/path/to/dstssh経由でrsyncを使用する際、
--partialオプションと--progressオプションは非常に便利です。これらは、以前の同期が中断された場合に部分的な転送を再開し、すべてのファイルの現在の転送進行状況を表示します。それぞれの機能を単一のフラグにまとめるには、-Pオプションを使用できます。rsync -avP -e ssh /src/ user@remote:/path/to/dst-
リモート転送に関連するもう1つの便利なオプションは、ファイル圧縮を有効にする
-zフラグです。これにより、帯域幅を少し節約し、データ転送を速くすることができますが、転送前にファイルを圧縮するためにシステムが少しのCPU使用量を必要とします。rsync -avPz -e ssh /src/ user@remote:/path/to/dst
このコマンドは、ソースディレクトリ/srcを宛先ディレクトリ/dstと同期させます。
sshを介してrsyncを使用してMySQLデータベースをバックアップする
あなたのウェブサイトがMySQLのようなデータベースを使用している場合、まずデータベースのバックアップを作成し、次にrsyncを使用してリモートサーバーへの変更を転送する必要があります。こちらはMySQLをバックアップするためのrsyncスクリプトの例です。
#!/bin/bash
create database backup
ssh user@server.remote '( mysqldump --password='pass' \
mydatabase > ~/public_html/mywebsite/mydatabase.sql )'
rsync -avze ssh --delete\
user@server.remote:~/public_html/mywebsite /backup/local-copy
この時点で、スクリプトはリモートの~/public_html/mywebsiteディレクトリのローカルコピーを作成し、/backup/local-copyに保存します。–deleteオプションは、ソースディレクトリに存在しなくなったリモートディレクトリのすべてのファイルを削除することを保証し、両方のディレクトリを完全に同期させます。rsyncの-zオプションは、転送中の圧縮を保証します。
私たちは新しいバックアップスクリプトをテストする準備ができました。
chmod 700 backupscript.sh
./backupscript.sh
cronを使用してrsyncバックアップをスケジュールします
もしあなたのrsyncスクリプトがうまく動作すれば、このバックアップスクリプトを毎日実行するようにスケジュールできます。
例えば、スクリプトを毎日午前2時に実行させるには、次のコマンドでcronを開きます:
crontab -e
次の行をcronに追加してください:
0 2 * * * /path/to/backupscript.sh
締めくくりの考え
このチュートリアルでは、sshを使用してrsyncを利用し、増分バックアップを作成し、それらをリモートサーバーに送信する方法を見ました。バックアップにsshを使用することで、データが転送中にすべて暗号化されることが保証されます。また、このコマンドを使用する際のさらなる便利さを提供するさまざまなrsyncオプションについても学びました。rsyncスクリプトを作成し、cronでスケジュールすることは、シンプルで安全かつ効率的なバックアップを作成するための最良の方法の一つです。
