当前位置: > CentOS > CentOS服务器 > 文件同步 >

CentOS使用rsync异地备份

时间:2014-08-06 15:33来源:linux.it.net.cn 作者:it

本文提供了一种快速的方法来备份最常见的事情在一个典型的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/

 有了这个设置,我们有我们的数据设置了紧急情况下的基本备份。

(责任编辑:IT)
------分隔线----------------------------