DigitalOcean提供 快照和備份,來處理備份和快照非常好。 還有一些優(yōu)秀的備份即服務(wù)解決方案,能夠以最低配置工作。 但有時我們想使用另一個備份服務(wù)器或者內(nèi)部服務(wù)器,我們想要一個快速的方法將數(shù)據(jù)從webhost回到我們的服務(wù)器。 在這種情況下,這些提示可以幫助。
有兩種方法可以進行備份:增量備份和完全備份。 完全備份復制所有數(shù)據(jù),而快照僅處理自上次更新以來的更改。
完全備份通常執(zhí)行以下操作:
對文件夾中的所有文件進行歸檔
將生成的歸檔復制到遠程服務(wù)器。
如上所述,我們的數(shù)據(jù)將駐留在/ var / www / wordpress目錄中。 我們將指定一個備份文件夾位置。
mkdir -p /backup/wordpress
上面的命令將創(chuàng)建一個/ backup目錄,和一個/ backup / wordpress目錄,如果它們不存在。 要創(chuàng)建我們的數(shù)據(jù)的完整快照,我們使用稱為tar的linux工具。
tar -czf /backup/wordpress/initial_backup.tar.gz /var/www/wordpress
tar將c在A F ILE initial_backup.tar.gz reate AG?IP存檔。 我們可以添加一個v標志(所以我們得到的tar-czvf)如果我們想要一個詳細輸出(文件名列表)。 我們將文件命名為initial_backup.tar.gz,以便我們知道這是一個初始備份,它使用tar歸檔,iz以gzip格式壓縮。 tar會使用任何參數(shù),我們提供一個來源,我們的情況下,將備份的/ var / WWW / WordPress的目錄中。 我們可以傳遞兩個或多個參數(shù),無論它們是文件還是文件夾:ie。
tar -czf /backup/cms_systems_backup.tar.gz /var/www/wordpress /var/www/drupal /var/www/joomla
最后一個命令將備份所有已安裝的cms系統(tǒng)。
現(xiàn)在,對于我們將來的備份,我們可能需要在備份時添加一個日期:
tar -czf /backup/wordpress/wordpress-`date '+%m%d%y'`.tar.gz /var/www/wordpress
讓我們看看我們現(xiàn)在有什么:
[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日,寫作時間)。 現(xiàn)在,為了每天計劃,我們需要創(chuàng)建一個crontab條目。 Crontab是一個linux任務(wù)調(diào)度器:我們告訴它什么時候做什么和什么任務(wù)實際上做。 無論如何,我們打開crontab編輯器: EDITOR=nano crontab -e 它將在文本編輯器中打開一個crontab文件。 默認情況下,DO CentOS映像包括vim作為編輯器,這需要一些設(shè)置,所以我們使用了一個更簡單的編輯器為此目的,稱為nano編輯器。 我們可以使用默認編輯器: crontab -e 現(xiàn)在我們需要告訴cron備份,比方說,每天上午3:30,當有希望不是很多交通。 我們還將通過電子郵件向我們發(fā)送任何調(diào)查結(jié)果。 我們把這個內(nèi)容放到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向我們發(fā)送電子郵件的結(jié)果。 您將收到消息:/斌/tar:取下成員名稱領(lǐng)先’/’,作為一個標志,一切都通過。 如果出現(xiàn)錯誤,消息將包含詳細信息,所以我們可以解決這個問題。 因此,每日備份已準備就緒并可正常工作。
要將備份復制到另一個遠程服務(wù)器,我們將使用scp – 安全復制。 首先,我們需要生成一個ssh密鑰:
ssh-keygen
我們可以將密碼為空,現(xiàn)在,使用/root/.ssh/id_rsa_backup密鑰文件(或/home/username/.ssh/id_rsa_backup如果我們不以root身份運行)。 現(xiàn)在我們可以檢查公鑰部分:
cat .ssh/id_rsa_backup.pub
我們需要將SSH密鑰的公共部分復制到遠程服務(wù)器,復制到authorized_keys文件。 我認為我們已經(jīng)有了backup.example.com稱為遠程服務(wù)器和用戶備份 。 這可能是一個空的新創(chuàng)建的DigitalOcean VPS(Droplet),但用戶必須事先創(chuàng)建。 我們只做這一部分一次。
scp .ssh/id_rsa_backup.pub backup@backup.example.com:/home/backup/backup_key.pub
系統(tǒng)將提示您輸入備份用戶的密碼。 我們復制了該文件,現(xiàn)在讓我們在authorized_keys中將它添加到應該放在哪里。 我不能假設(shè)這個用戶已經(jīng)有文件和文件夾設(shè)置,所以讓我們檢查一下信息:
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"
上面的幾個命令創(chuàng)建了一個用于SSH工作的目錄(如果它不存在),以及authorized_keys文件,它需要存在備份才能工作。 我們還創(chuàng)建了一個備份目錄,以我們的文件存儲。 現(xiàn)在剩下的是將我們的公鑰復制到該文件。
ssh backup@backup.example.com "cat /home/backup/backup_key.pub >> /home/backup/.ssh/authorized_keys"
現(xiàn)在我們可以使用這個鍵來復制東西。
現(xiàn)在,讓我們復制備份文件:
scp -i .ssh/id_rsa_backup /backup/wordpress/wordpress-041713.tar.gz backup@backup.example.com:/home/backup/backups
如果我們的密鑰設(shè)置正確,文件將被復制,我們不會要求輸入密碼。 我們可以檢查文件是否真的存在:
ssh backup@backup.example.com "ls -l /home/backup/backups" 好的,我們現(xiàn)在可以把這個動作安排到crontab了。 再次啟動crontab編輯器: EDITOR=nano crontab -e 我們現(xiàn)在將改變我們的備份行:我們要添加信息,以便在創(chuàng)建備份存檔時復制它。 所以,我們添加新的命令,使它看起來像這樣: 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
注意:這不是通常的做法,最好設(shè)置一個腳本,它執(zhí)行所有的任務(wù),然后調(diào)度腳本。 但為了本文的簡潔,我們將使用該表單。
但是如果我們在另一個服務(wù)器有我們自己的備份軟件怎么辦? 我們只是想同步數(shù)據(jù),然后讓其他服務(wù)器做備份工作。 此外,我們要保留文件戳。 然后我們使用rsync。 這里的用例是,我們只想逐步高于一切這一次復制在/ var / WWW / WordPress的到遠程服務(wù)器,到/家庭/備份/快照/ 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 第一行創(chuàng)建一個快照目錄,第二份修改過的文件了。 這意味著被修改,新創(chuàng)建或刪除的文件。 我們可以在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 現(xiàn)在我們的遠程服務(wù)器總是有一個新的數(shù)據(jù)同步副本,我們可以做備份。
我們還可以備份我們的數(shù)據(jù)庫。 首先,我們要轉(zhuǎn)儲數(shù)據(jù)。 如果我們遵循的WordPress的安裝指導,我們也有一個數(shù)據(jù)庫,WordPress的 ,由用戶與wordpressuser密碼password訪問。 我們可以這樣做初始轉(zhuǎn)儲:
mkdir /backup/mysql mysqldump /backup/mysql/initial.sql.gz 此命令創(chuàng)建了一個initial.sql.gz gziped SQL文件。 為了每天這樣做,我們可以像cron一樣在cron中調(diào)度它。 我們生成的cron行應該是這樣: 0 4 * * * /usr/bin/mysqldump /backup/mysql/mysql--`date +%m%d%y`.sql.gz 現(xiàn)在我們還可以結(jié)合它與scp或rsync遠程復制它。 0 4 * * * /usr/bin/mysqldump /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/ 有了這個設(shè)置,我們有一個基本的備份我們的數(shù)據(jù)設(shè)置為緊急情況。