Hello! 欢迎来到小浪云!


细述Rsync在Centos上创建异地备份站点


avatar
小浪云 2024-10-28 47

细述Rsync在Centos上创建异地备份站点

DigitalOcean提供 快照和备份,来处理备份和快照非常好。 还有一些优秀的备份即服务解决方案,能够以最低配置工作。 但有时我们想使用另一个备份服务器或者内部服务器,我们想要一个快速的方法将数据从webhost回到我们的服务器。 在这种情况下,这些提示可以帮助。

有两种方法可以进行备份:增量备份和完全备份。 完全备份复制所有数据,而快照仅处理自上次更新以来的更改。

完全备份

完全备份通常执行以下操作:

对文件夹中的所有文件进行归档

将生成的归档复制到远程服务器

如上所述,我们的数据将驻留在/ var / www / wordpress目录中。 我们将指定一个备份文件夹位置。

 mkdir -p /backup/wordpress 
登录后复制

上面的命令将创建一个/ backup目录,和一个/ backup / wordpress目录,如果它们不存在。 要创建我们的数据的完整快照,我们使用称为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会使用任何参数,我们提供一个来源,我们的情况下,将备份的/ 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文件。 默认情况下,DO CentOS映像包括vim作为编辑器,这需要一些设置,所以我们使用了一个更简单的编辑器为此目的,称为nano编辑器。 我们可以使用默认编辑器:  crontab -e 现在我们需要告诉cron备份,比方说,每天上午3: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向我们发送电子邮件的结果。 您将收到消息:/斌/tar:取下成员名称领先’/’,作为一个标志,一切都通过。 如果出现错误,消息将包含详细信息,所以我们可以解决这个问题。 因此,每日备份已准备就绪并可正常工作。

将备份复制到另一个远程服务器

要将备份复制到另一个远程服务器,我们将使用scp – 安全复制。 首先,我们需要生成一个ssh密钥:

 ssh-keygen 
登录后复制

我们可以将密码为空,现在,使用/root/.ssh/id_rsa_backup密钥文件(或/home/username/.ssh/id_rsa_backup如果我们不以root身份运行)。 现在我们可以检查公钥部分:

 cat .ssh/id_rsa_backup.pub 
登录后复制

我们需要将SSH密钥的公共部分复制到远程服务器,复制到authorized_keys文件。 我认为我们已经有了backup.example.com称为远程服务器和用户备份 。 这可能是一个空的新创建的DigitalOcean VPS(Droplet),但用户必须事先创建。 我们只做这一部分一次。

 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的到远程服务器,到/家庭/备份/快照/ 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密码password访问。 我们可以这样做初始转储:

 mkdir /backup/mysql mysqldump  /backup/mysql/initial.sql.gz 此命令创建了一个initial.sql.gz gziped SQL文件。 为了每天这样做,我们可以像cron一样在cron中调度它。 我们生成的cron行应该是这样:  0 4 * * * /usr/bin/mysqldump  /backup/mysql/mysql--`date +%m%d%y`.sql.gz 现在我们还可以结合它与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/ 有了这个设置,我们有一个基本的备份我们的数据设置为紧急情况。 
登录后复制

相关阅读