rsyncでリモートサーバにファイル転送
目次
概要
rsyncを使用してリモートサーバにファイルやディレクトリのバックアップを行います。 今回は例としてMySQLのデータベースファイルをリモートサーバにバックアップします。 ファイル単体で転送する場合と、ディレクトリ丸ごと転送する方法がありますので、 それぞれ掲載しています。
構成
サーバ構成
OSバージョン
CentOS 6.4 x86_64
ソフトウェア・パッケージ一覧
rsync-3.0.6-9.el6.x86_64
手順
rsyncのオプション
以下の実行例ではrsyncのオプションとして『-av』と指定していますが、 それぞれどのような意味なのかまとめておきます。
オプション | 説明 |
---|---|
-a | -rlptgoDオプションを全て指定したのと同じ意味になります。 各オプションの意味は以下を参照。 |
-v | 転送情報を詳しく表示します。 |
-r | ディレクトリを再帰的にコピーします。 |
-l | 同期先でシンボリックリンクを作成します。 |
-p | パーミッションを維持します。 |
-t | タイムスタンプを維持します。 |
-g | グループを維持します。(rootで実行した場合のみ) |
-o | オーナーを維持します。(rootで実行した場合のみ) |
-D | デバイスを維持します。(rootで実行した場合のみ) |
ファイルの転送
MySQLのデータベースファイルを1つ転送します。 転送先はサーバ(IPアドレス:192.168.0.93)上のパス /data/backup/ 配下です。
# cd /opt/redmine-2.4.2-0/mysql/data/
# ls -l
合計 36900
drwx------ 2 mysql mysql 4096 1月 25 01:18 2014 bitnami_redmine
-rw-rw---- 1 mysql mysql 5242880 2月 11 14:58 2014 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 1月 25 01:17 2014 ib_logfile1
-rw-rw---- 1 mysql mysql 27262976 2月 5 00:43 2014 ibdata1
drwx------ 2 mysql root 4096 1月 25 01:17 2014 mysql
-rw-r----- 1 mysql root 13916 2月 11 14:58 2014 mysqld.log
-rw-rw---- 1 mysql mysql 5 2月 11 14:58 2014 mysqld.pid
drwx------ 2 mysql root 4096 1月 25 01:17 2014 performance_schema
drwxr-xr-x 2 mysql root 4096 1月 25 01:15 2014 test
# rsync -av ./ibdata1 192.168.0.93:/data/backup/
The authenticity of host '192.168.0.93 (192.168.0.93)' can't be established.
RSA key fingerprint is d7:67:66:91:dd:f3:a1:97:f3:5d:0e:c4:06:7f:a8:7b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.93' (RSA) to the list of known hosts.
root@192.168.0.93's password: ←パスワードを入力(表示されません)
sending incremental file list
ibdata1
sent 27266391 bytes received 31 bytes 2596802.10 bytes/sec
total size is 27262976 speedup is 1.00
転送先サーバで転送されたファイルを確認します。 ファイルのuidとgidが数字で表示されています。 これは転送元サーバで使われていたmysqlユーザとmysqlグループが 転送先サーバに存在しないためです。特に問題ありません。
# ls -l /data/backup/ 合計 26624 -rw-rw---- 1 500 500 27262976 2月 5 00:43 2014 ibdata1
ディレクトリの転送(指定したディレクトリ自体を含め丸ごと転送)
次はディレクトリを転送します。 微妙なコマンド引数の指定方法の違いで、指定したディレクトリが 転送される場合と、ディレクトリの中身だけが転送される場合があります。 具体的に言うと、『data』と指定した場合と『data/』と指定した場合で 転送内容が変わります。
data ⇒dataディレクトリとその中身を転送
data/ ⇒dataディレクトリは転送されず、その中身だけを転送
ここでは引数で指定したディレクトリとディレクトリの中身を転送します。 転送元のディレクトリを相対パスで『./data』と指定します。
# cd /opt/redmine-2.4.2-0/mysql/ # ls -l 合計 192 -rw-r--r-- 1 root root 17987 9月 10 03:01 2013 COPYING -rw-r--r-- 1 root root 134703 9月 10 03:01 2013 INSTALL-BINARY -rw-r--r-- 1 root root 2496 9月 10 03:01 2013 README drwxr-xr-x 2 root root 4096 1月 25 01:15 2014 bin drwxr-xr-x 6 mysql root 4096 2月 11 14:58 2014 data drwxr-xr-x 3 root root 4096 1月 25 01:15 2014 include drwxr-xr-x 3 root root 4096 1月 25 01:15 2014 lib -rw-r--r-- 1 root root 625 1月 25 01:17 2014 my.cnf drwxr-xr-x 2 root root 4096 1月 25 01:15 2014 scripts drwxr-xr-x 27 root root 4096 1月 25 01:15 2014 share drwxr-xr-x 3 root root 4096 1月 25 01:15 2014 support-files drwxrwxrwx 2 root root 4096 2月 11 14:58 2014 tmp # rsync -av ./data 192.168.0.93:/data/backup/ root@192.168.0.93's password: ←パスワードを入力(表示されません) sending incremental file list data/ data/ib_logfile0 data/ib_logfile1 data/ibdata1 data/mysqld.log (中略) data/performance_schema/setup_instruments.frm data/performance_schema/setup_timers.frm data/performance_schema/threads.frm data/test/ data/test/db.opt sent 39285403 bytes received 2825 bytes 6044342.77 bytes/sec total size is 39270838 speedup is 1.00
転送先サーバで転送されたディレクトリを確認します。 dataディレクトリ毎転送されていることが分かります。
# ls -l /data/backup/ 合計 4 drwxr-xr-x 6 500 root 4096 2月 11 14:58 2014 data
ディレクトリの転送(指定したディレクトリ内のファイルを転送)
続いてコマンド引数で指定したディレクトリ自体は転送せず、 その中身だけを転送します。 転送先ディレクトリを相対パスで『./data/』と指定します。
# cd /opt/redmine-2.4.2-0/mysql/ # ls -l 合計 192 -rw-r--r-- 1 root root 17987 9月 10 03:01 2013 COPYING -rw-r--r-- 1 root root 134703 9月 10 03:01 2013 INSTALL-BINARY -rw-r--r-- 1 root root 2496 9月 10 03:01 2013 README drwxr-xr-x 2 root root 4096 1月 25 01:15 2014 bin drwxr-xr-x 6 mysql root 4096 2月 11 14:58 2014 data drwxr-xr-x 3 root root 4096 1月 25 01:15 2014 include drwxr-xr-x 3 root root 4096 1月 25 01:15 2014 lib -rw-r--r-- 1 root root 625 1月 25 01:17 2014 my.cnf drwxr-xr-x 2 root root 4096 1月 25 01:15 2014 scripts drwxr-xr-x 27 root root 4096 1月 25 01:15 2014 share drwxr-xr-x 3 root root 4096 1月 25 01:15 2014 support-files drwxrwxrwx 2 root root 4096 2月 11 14:58 2014 tmp # rsync -av ./data/ 192.168.0.93:/data/backup/ root@192.168.0.93's password: ←パスワードを入力(表示されません) sending incremental file list ./ ib_logfile0 ib_logfile1 ibdata1 mysqld.log (中略) performance_schema/setup_instruments.frm performance_schema/setup_timers.frm performance_schema/threads.frm test/ test/db.opt sent 39285382 bytes received 2824 bytes 6044339.38 bytes/sec total size is 39270838 speedup is 1.00
転送先サーバで転送されたファイルを確認します。 dataディレクトリ自体は転送されておらず、dataディレクトリの中身だけが 転送されていることが分かります。
# ls -l /data/backup/ 合計 36900 drwx------ 2 500 500 4096 1月 25 01:18 2014 bitnami_redmine -rw-rw---- 1 500 500 5242880 2月 11 14:58 2014 ib_logfile0 -rw-rw---- 1 500 500 5242880 1月 25 01:17 2014 ib_logfile1 -rw-rw---- 1 500 500 27262976 2月 5 00:43 2014 ibdata1 drwx------ 2 500 root 4096 1月 25 01:17 2014 mysql -rw-r----- 1 500 root 13916 2月 11 14:58 2014 mysqld.log -rw-rw---- 1 500 500 5 2月 11 14:58 2014 mysqld.pid drwx------ 2 500 root 4096 1月 25 01:17 2014 performance_schema drwxr-xr-x 2 500 root 4096 1月 25 01:15 2014 test