rsyncコマンドを利用したサーバー内・サーバー間の同期方法まとめ
【概要】このドキュメントでは、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つあります。・パターン1rsync -av --checksum --delete --inplace /var/www/html/stg-WP/wp-content/themes wp-web-server:/var/www/html/prd-WP/wp-content・パターン2rsync -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