CentOS使用rsync異地備份
介紹
本文提供了一種快速的方法來備份最常見的事情在一個典型的Web主機情形:網站文件和數據庫中的數據。我們將設置一個網站的文件夾的完整每日備份和這個數據到一個遠程服務器的一個拷貝(這也可以工作于另一個VPS) 。我們還將成立一個rsync的例子,剛才復制的增量變化。最后,我們將建立一個MySQL數據庫的備份。該程序描述使用幾個簡單的bash命令, rsync的和cron來安排備份。例如數據,我們就可以安裝WordPress的按照本教程。它將把WordPress在/var/www /WordPress的目錄和MySQL數據庫的WordPress ,我們現在要采取的所有數據的備份。
快照和備份,來處理備份和快照非常好。也有優秀的,與最低配置備份工作作為一種服務解決方案。但有時我們想使用其他備份服務器或者一個服務器點播服務,并且我們希望有一個快速的方法來拉從主機商到我們的服務器上的數據。在這種情況下,這些技巧可以幫助。
有兩種方法可以做到備份:增量備份和完全備份。一個完整的備份副本中的所有數據,而快照只處理自上次更新的變化。
完整備份
完全備份通常具有下列功能:
使所有的文件夾中的歸檔
生成的存檔復制到遠程服務器。
如前所述,我們的數據將駐留在/var/www/WordPress的目錄。我們將指定備份文件夾位置。
mkdir -p /backup/wordpress
上面的命令將創建一個/ backup目錄和/backup/wordpress的目錄,如果它們不存在。要創建我們的數據的完整快照,我們使用linux的tar工具
tar -czf /backup/wordpress/initial_backup.tar.gz
/var/www/wordpress
tar會在一個文件initial_backup.tar.gz創建一個gzip壓縮文件。我們可以添加AV標志(所以我們得到的tar- czvf)如果我們想要一個詳細的輸出(文件名列表)。這樣我們就知道這是一個初始的備份,它是存檔焦油和IZ被壓縮在一個gzip格式,我們將文件命名為initial_backup.tar.gz。tar會使用任何參數,我們提供一個源,在我們的情況下,它會備份/var/www/WordPress 的目錄。我們可以通過兩個或多個參數,不論是文件或文件夾:IE瀏覽器。
tar -czf /backup/cms_systems_backup.tar.gz /var/www/wordpress /var/www/drupal /var/www/joomla
最后的命令會備份所有已安裝的CMS系統。
現在,對于我們未來的備份,我們可能要添加的時候拍攝的備份日期:
tar -czf /backup/wordpress/wordpress-`date '+%m%d%y'`.tar.gz
/var/www/wordpress
現在我們來看看有什么
[root@Backup ~]# ls -l /backup/wordpress/ total 9760 -rw-r--r-- 1 root root 4995743 Apr 17 12:16 initial_backup.tar.gz -rw-r--r-- 1 root root 4995743 Apr 17 12:25 wordpress-041713.tar.gz [root@Backup ~]#
我們有兩個文件,一個叫initial_backup,一個叫做wordpress-041713(于2013年4月17日,寫這篇文章的時間)。現在,每天安排這一點,我們需要創建一個crontab條目。 crontab的是linux計劃任務:我們告訴它何時做一些事情,什么任務怎么做。無論如何,我們開辟了crontab的編輯器:
EDITOR=nano crontab -e
它會在文本編輯器中打開一個crontab文件。默認情況下,不要CentOS的映像包含的vim作為編輯,這需要一個位設置的,所以我們用于此目的的一個簡單的編輯器,叫nano編輯器。我們可以只使用默認編輯器:
crontab -e
現在,我們每天都需要告訴cron來備份,比如說,在上午03點30的時候,有沒有希望大量的流量。我們也會告訴它給我們發電子郵件的任何結果。我們把這個內容到crontab中:
MAILTO=email@example.com 30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date +\%m\%d\%y`.tar.gz /var/www/wordpress
我們保存文件用CTRL-X和確認Y和Enter鍵。上面的命令會告訴linux的每天3:30重復我們的命令。我們也告訴cron來的結果給我們發電子郵件。您將收到以下消息:/bin/tar:從成員名中刪除龍頭'/',作為一個標志,一切都進行得很順利。在錯誤的情況下,該消息將包含信息,以便我們能夠解決這個問題。所以,每天的備份準備和工作。
將備份復制到另一個遠程服務器
要備份復制到另一個遠程服務器中,我們將使用scp - 安全復制。首先,我們需要生成SSH密鑰:
ssh-keygen
我們可以把口令為空就目前而言,并使用的/ root /.ssh/ id_rsa_backup密鑰文件(或/ home/用戶名/.ssh/ id_rsa_backup如果我們沒有作為root運行)。現在,我們可以檢查的公鑰部分:
cat .ssh/id_rsa_backup.pub
我們需要的SSH密鑰,這個公共部分復制到遠程服務器,一個文件authorized_keys中。我假設我們已經有一個名為 backup.example.com遠程服務器和用戶備份。這可能是一個空的新創建的DigitalOcean VPS(液滴),但是,用戶必須預先創建。我們只會做這部分一次。
scp .ssh/id_rsa_backup.pub backup@backup.example.com:/home/backup/backup_key.pub
我們將提示輸入備份用戶的密碼。我們復制的文件,現在讓我們來添加它,它應該是,在authorized_keys中。我不能假設這個用戶已經有設置文件和文件夾,所以讓我們檢查信息:
ssh backup@backup.example.com "mkdir -p /home/backup/.ssh" ssh backup@backup.example.com "chmod 700 /home/backup/.ssh" ssh backup@backup.example.com "touch /home/backup/.ssh/authorized_keys" ssh backup@backup.example.com "chmod 600 /home/backup/.ssh/authorized_keys" ssh backup@backup.example.com "mkdir -p /home/backup/backups"
上面的幾個命令創建一個目錄用于SSH一起工作,如果它本來不存在,也authorized_keys文件,這需要存在的備份工作。我們還創建了一個備份目錄,以我們的文件存儲。現在剩下的就是我們的公鑰復制到該文件中。
ssh backup@backup.example.com "cat /home/backup/backup_key.pub >> /home/backup/.ssh/authorized_keys"
現在,我們可以用這個鍵來復制的東西在未來。
現在,讓我們復制的備份文件在那里:
scp -i .ssh/id_rsa_backup /backup/wordpress/wordpress-041713.tar.gz backup@backup.example.com:/home/backup/backups
如果我們的關鍵的設置是正確的,該文件將被復制,我們不會被要求提供密碼,我們可以檢查該文件是否真的存在:
ssh backup@backup.example.com "ls -l /home/backup/backups"
好吧,我們現在可以安排這個動作到crontab太再次啟動crontab的編輯器:
EDITOR=nano crontab -e
現在,我們將改變我們的備份線路:我們要添加信息來復制我們的備份存檔時,它的創建,所以我們追加了新的命令,以便它看起來像這樣:
30 3 * * * /bin/tar -czf /backup/wordpress/wordpress-`date +\%m\%d\%y`.tar.gz /var/www/wordpress;/usr/bin/scp -i /root/.ssh/id_rsa_backup /backup/wordpress/wordpress-`date +\%m\%d\%y`.tar.gz backup@backup.example.com:/home/backup/backups
注:這不是通常的方式來做到這一點,這將是更好的設置,其中完成所有任務的腳本,然后安排腳本但對于本文的簡潔,我們將使用這種形式。
增量備份
但是,如果我們有我們在另一臺服務器的備份軟件?我們只是想通過同步數據,然后保留其他服務器做備份工作。此外,我們希望保留文件的郵票。然后我們使用rsync。用例這里是我們想只復制增量高于一切從/var/www/WordPress的到遠程服務器,這時候到的/home /backup/snapshots/wordpress的目錄下面是一個簡單的命令來實現這些功能:
ssh backup@backup.example.com "mkdir -p /home/backup/sync" rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa_backup" /var/www/wordpress backup@backup.example.com:/home/backup/sync
第一行創建一個快照目錄,并在這第二份修改過的文件指進行了修改,新創建或刪除的,我們可以在cron安排它太的文件:
EDITOR=nano crontab -e
在crontab行看起來應該像這樣:
30 3 * * * /usr/bin/rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa_backup" /var/www/wordpress backup@backup.example.com:/home/backup/sync
現在我們的遠程服務器永遠有數據的新鮮已同步副本,我們可以做備份那里。
備份數據庫
我們還可以備份我們的數據庫首先,我們要轉儲數據如果我們遵循了WordPress的安裝指導,我們也有一個數據庫的WordPress,用戶wordpressuser用密碼訪問密碼,我們可以這樣做最初的轉儲:
mkdir /backup/mysql
mysqldump < wordpress -u wordpressuser -ppassword | gzip >
/backup/mysql/initial.sql.gz
這個命令創建一個initial.sql.gz gziped SQL文件要做到這一點,每天,我們可以在cron調度它,就像之前我們造成的cron行看起來應該像這樣:
0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser -ppassword | /bin/gzip > /backup/mysql/mysql--`date +\%m\%d\%y`.sql.gz
現在,我們也可以使用scp或rsync的組合來進行遠程復制。
0 4 * * * /usr/bin/mysqldump < wordpress -u wordpressuser -ppassword | /bin/gzip > /backup/mysql/mysql-`date +\%m\%d\%y`.sql.gz; /usr/bin/scp -i /root/.ssh/id_rsa_backup /backup/mysql/mysql-`date +\%m\%d\%y`.sql.gz backup@backup.example.com:/home/backup/
有了這個設置,我們有我們的數據設置了緊急情況下的基本備份。
原文地址:http://leisudeng.com/CentOS-Tutorials/CentOS-Tutorials-146-1.html