rsyncを使った同期方法についてまとめてみる。
rsyncの経路としてsshを使用し,ローカルからリモート側へファイルを転送することでバックアップとする。
パスワードを空にしておくのはちょっと...と思ったんだけど,ssh2の鍵ペアを作成しローカル側とリモート側で秘密鍵と公開鍵を使って認証する。
でもって,リモート側でrsyncで接続してきた場合には,特定のコマンドしか実行できないようにしておく。
# ssh-keygen -t dsa -N "" -f rsync
Generating public/private dsa key pair. Your identification has been saved in rsync. Your public key has been saved in rsync.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx who@samone.example.com The key's randomart image is: +--[ DSA 1024]----+ | x.x | | x x | | x x | | x x | | x x | | x x x x x x | | x x x x | | x x x x | | xx xxxx xx x | +-----------------+ # ls rsync rsync.pub
rsyncが秘密鍵,rsync.pubが公開鍵が作成されたので,出来上がった公開鍵をリモートの.ssh/authorized_keyに追加する。
というかリモート側の.sshにはauthorized_keysが無かったので,rsync.pubをローカル側からリモート側へコピーし更に.sshに移動した。
まず,コマンドにlsを設定し,ローカル側からリモートへ接続しテストしてみる。
remort> cat /who/.ssh/authorized_keys from="相手のIPアドレス",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty,command="/bin/ls" ssh-rsa AAAAB....
local> ssh -i /who/.ssh/rsync who@remote : : Connection to ローカル closed.
リモート側のファイルが表示されれば接続はOK
ということで,ローカル側で指定したコマンドとリモート側のauthorized_keysのcommandが一致しているとauthorized_keysに指定されたコマンドが実行される。
remote> cat /who/.ssh/authorized_keys from="相手のIPアドレス",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty,command="rsync --server -av そーす でぃすてぃねーしょん" ssh-rsa AAAA....
local> rsync -av -e "ssh -i /who/.ssh/rsync" そーす who@remote:/でぃすてぃねーしょん
とするとローカル側からリモート側へファイルの同期が実行される。というかコピーされる。
実際には,--deleteオプションを指定するとローカル側で削除されたファイルはリモート側でも削除され同期が行われる。
rsyncを使うもともとの動機は,とあるWebシステムのバックアップ。いまどきはWebサーバ(Apache使ってる)単体で 使うことなくRDBを使用している。mysqlを使ったりpostgreSQLを使ったりしていたんだけど,ここのところ,mysqlだったりするので,mysqlに特化した方法というかメモです。
> mysqldump -u root -p --all-databases > dump_all.sql Password:
> mysqldump -u root -p --databases データベース名 > dump.sql
> mysqldump -u root -p < dump_all.sql
> mysqldump -u root -p データベース名 < dump.sql
一連の作業をスクリプトにしてcronで自動的にバックアップすりゃいいんじゃないかと思ってる。<今,ここ
参考