2018年9月7日 星期五

rsync 備份

rsync 備份有三種方式


第一種:臨時起意
  • 從scp談起
scp 可以複製檔案到遠端,或是從遠端複製回來。
例如,我有兩部電腦,一部是 163.30.142.12, 一部是163.30.142.8
我想要把163.30.142.12裡 /tycx/yes 目錄下的所有資料 複製到 163.30.142.8的 var/www/html目錄下可以用
先登入 163.30.142.12
然後使用
scp -r /tycx/yes/* root@163.30.142.8:/var/www/html/yes 就可以把 163.30.142.12的/tycx/yes目錄(含子目錄和底下的檔案)複製到163.30.142.8 /var/www/html 目錄底下,前題是163.30.142.8的/var/www/html目錄下要先建好yes目錄。
反過來用
scp -r  root@163.30.142.8:/var/www/html/yes/* /tycx/yes/ 就會複製回來。
使用scp作為備份還原,僅適合資料量較少的情形,因為scp指令和cp相同就是努力的複製,不會先檢查是否相同。

scp -r /tycx/yes/* root@163.30.142.8:/var/www/html/yes
root@163.30.142.8's password: (輸入密碼)

另外,scp使用時會先詢問 root的密碼。(scp是透過ssh通道傳送)
若要省掉詢問可以利 用 ssh-keygen 來做出公用和私有鑰匙,並傳送 public key 到163.30.142.8給root
使其信任本機的登入。(反過來,163.30.142.8的root用ssh-keygen 來做出公用和私有鑰匙,並將public key 傳給tycx也可以)

  • rsync基本使用

rsync -av /etc /tmp (將 /etc/ 的資料備份到 /tmp/etc 內,同cp)
rsync -av /tycx/yes root@163.30.142.8:/var/www/html  功能如同 scp -r /tycx/yes/* root@163.30.142.8:/var/www/html/yes
rsync -av -e ssh /tycx/yes root@163.30.142.8:/var/www/html 功能同上但是透過ssh通道


第二種利用公用和私用鑰匙 (製作 public keys & private keys)

利用 ssh-keygen 來做出公用和私有鑰匙,並傳送 public key 到遠端機器使其信任本機登入。
tycx@gmail:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/tycx/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): (直接輸入ENTER)
Enter same passphrase again: (直接輸入ENTER)
Your identification has been saved in /tycx/.ssh/id_dsa.
Your public key has been saved in /tycx/.ssh/id_dsa.pub.
The key fingerprint is:
ed:56:d9:06:f2:3d:ca:3d:29:05:f1:97:1c:4a:05:0a tycx@gmail.nlps.tyc.edu.tw
接著,再到 /tycx/.ssh 裡看看,會多出 id_dsa 和 id_dsa.pub 這兩個檔案。
tycx@gmail:~$ cd /tycx/.ssh
tycx@gmail:~/.ssh$ ls
id_dsa  id_dsa.pub  known_hosts
現在我們要使遠端機器163.30.142.8,使用 root 登入時不用輸入密碼,因為,我們應該複製一份 id_dsa.pub 到 root@163.30.142.8 去,並加入到 authorized_keys。
tycx@gmail:~/.ssh$ scp id_dsa.pub root@163.30.142.8:/root/
root@163.30.142.8's password:
id_dsa.pub                          100%  616     0.6KB/s   00:00
登入  root@163.30.142.8
[root@x ~]# ls
1                id_dsa.pub          mbox               sql
[root@x ~]# cat id_dsa.pub >> .ssh/authorized_keys
[root@x ~]# cd .ssh
[root@x .ssh]# ls
authorized_keys
[root@x .ssh]#
完成後離開,回到本機,再做一次 ssh 到 163.30.142.8

tycx@gmail:~/.ssh$ ssh root@163.30.142.8
Last login: Fri Oct 21 13:42:24 2011 from web.nlps.tyc.edu.tw

如此就不用輸入密碼就直接登入了!

rsync 配合ssh通做備份實例

有了以上的key的設定,我們就可以用rsync自由的備份還原了。
1. 備份程式碼
2. 備份資料庫
rsync -av -e ssh /tycx/moral root@163.30.142.8:/var/www/html
rsync -av -e ssh /var/lib/mysql/moral root@163.30.142.8:/var/lib/mysql (權限不足必須使用root)
設定到 crontab裡就可以定時備份了。

參考
使 用 SSH 配合憑證來遠端備 份檔案 (rsync) 將public key的使用範圍限縮,這樣才比較安全。

rsync + ssh 使用不同 port 的話, 需要加上 -e "ssh -p port_number", ex: 假設遠端的 ssh 機器是用 1234 port, 指令會如下述:
rsync -e "ssh -p 1234" -avz --bwlimit=3000 REMOTE_HOST:data_path .

第三種:利用rsync server
  • rsync server設定 (server.domain)

/etc/rsyncd.conf

[serverB]
path = /var/www/html/course
auth_users = web1
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = yes


/etc/rsyncd.secrets
web1:123456

  • 呼叫者 (rsync client)
建立 /root/rsyncd.secrets (只要密碼,位置可自訂)
123456

使用
rsync -rvlHpogDtS --password-file=/root/rsyncd.secrets web1@server.domain::serverB /var/www/html

沒有留言:

張貼留言