article-thumbnail

rsyncコマンドを利用したサーバー内・サーバー間の同期方法まとめ

カテゴリ: Linux

タグ: CentOS7,rsyncコマンド

2020-06-04 02:15:55

【概要】

このドキュメントでは、rsyncコマンドを使用してサーバー内もしくはサーバー間のファイル同期やディレクトリ同期方法をまとめています。

下記のようなパターンで特に有用です。

1. ファイルやディレクトリの権限を同期元と変えずに同期したい

2. 一括で同期をしたい

3. 特定のディレクトリのどのファイルが同期元と同期先で差異があるかわからないので、チェックして同期する


【rsyncコマンドの基本構文】

・基本構文

rsync -av 同期元 同期先


・オプション説明

1. -aオプション

ディレクトリを同期したい場合、再帰処理を行います。

つまり、指定したディレクトリ内部に存在するサブディレクトリに対しても同期対象として実行します。


2. -vオプション

実行中の同期処理を表示します。

よって、今どのファイルやディレクトリを同期しているのかがわかります。


・その他よく使うオプション説明

1. --checksumオプション

更新日とサイズではなく、チェックサムで変更の有無をチェックします。

よって、もし更新日とサイズが同じでもファイル内容が違う場合は同期先の対象ファイルを更新してくれます。


2. --inplaceオプション

同期先にファイルがある場合は上書きします。


3. --deleteオプション

同期元にないファイルを同期先から削除します。


【例文】

1. サーバー内のディレクトリ同期

rsync --checksum -av --delete /home/develop/Nuxt-APP/ /var/www/html/Nuxt-APP/

「/home/develop/Nuxt-APP/」配下のファイルやディレクトリの内容を「/var/www/html/Nuxt-APP/」配下に同期します。


2. サーバー内のファイル同期

rsync --checksum --inplace /home/develop/index.html /home/develop/rsync_test/index.html

「/home/develop/index.html」の内容を「/home/develop/rsync_test/index.html」に同期します。


3. サーバー間のファイル同期

rsync --checksum --inplace /var/www/html/index.html web-server:/var/www/html/index.html

上記は実行元サーバーの「/var/www/html/index.html」ファイルをweb-serverの「/var/www/html/index.html」に同期します。

※1 サーバー間でrsyncを行う為には同期元のサーバーから同期先のサーバーに接続できる必要があります。

同期先にSSHの鍵を登録し、同期元で「~/.ssh/config」の設定をしておくとHost名で接続先を記載できるので便利です。

※2 SSH設定をしていない場合、「Host名」を「ユーザー名@IP」で設定する必要があります。


4. サーバー間のディレクトリ同期

サーバー間のディレクトリを同期します。

ここでは例として「/var/www/html/stg-WP/wp-content/themes」と「/var/www/html/prd-WP/wp-content/themes」を同期します。

ディレクトリ同期をする場合の方法は2つあります。

・パターン1

rsync -av --checksum --delete --inplace /var/www/html/stg-WP/wp-content/themes wp-web-server:/var/www/html/prd-WP/wp-content

・パターン2

rsync -av --checksum --delete --inplace /var/www/html/stg-WP/wp-content/themes/ wp-web-server:/var/www/html/prd-WP/wp-content/themes

※1 パターン1は、もし「/var/www/html/WP/wp-content/themes」ディレクトリが存在しなければ同期元のディレクトリが同期先に作成されます。

※2 パターン2は 両サーバーに「/var/www/html/WP/wp-content/themes」がある事を前提としています。


・--deleteオプションの吹き飛ばし注意点

下記のようにしたら「prd-WP」ディレクトリの内容は「stg-WP/libs」以下のファイルとディレクトリのみになります。

rsync -av --checksum --delete --inplace /var/www/html/stg-WP/libs/ wp-web-server:/home/develop/prd-WP

もし、バックアップがない場合は取り返しがつきません。

また、WPが動かないというエラーが起きるのでrsyncで--deleteオプションを使う場合は要注意です。

よって、同期元で最後の「.../libs/」にスラッシュを付ける場合は同期先に「/libs」まで付ける必要があります。

同期元と同期先のパスと文末にスラッシュを付けているかどうかは要注意です!

同期元と同期先の「libs」ディレクトリの内容を同期したい場合のコマンド例は下記になります。

rsync -av --checksum --delete --inplace /var/www/html/stg-WP/libs/ wp-web-server:/home/develop/prd-WP/libs