40

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

 5 years ago
source link: https://www.linuxprobe.com/rsync-backup-linux.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
导读 本文提供了一种快速方法来备份典型Web托管方案中最常见的内容:网站文件和数据库数据。 我们将设置网站文件夹的完整每日备份,并将此数据复制到远程服务器(这也可以用于另一个VPS)。 我们还将设置一个rsync示例来复制增量更改。 最后,我们将设置MySQL数据库的备份。 所描述的过程使用几个简单的Bash命令,rsync和cron来计划备份。 例如数据,我们可以安装WordPress按照本教程。

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:

[email protected]
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
[email protected]:/home/backup/backup_key.pub

系统将提示您输入备份用户的密码。 我们复制了该文件,现在让我们在authorized_keys中将它添加到应该放在哪里。 我不能假设这个用户已经有文件和文件夹设置,所以让我们检查一下信息:

ssh [email protected] "mkdir -p /home/backup/.ssh"
ssh [email protected] "chmod 700 /home/backup/.ssh"
ssh [email protected] "touch /home/backup/.ssh/authorized_keys"
ssh [email protected] "chmod 600 /home/backup/.ssh/authorized_keys"
ssh [email protected] "mkdir -p /home/backup/backups"

上面的几个命令创建了一个用于SSH工作的目录(如果它不存在),以及authorized_keys文件,它需要存在备份才能工作。 我们还创建了一个备份目录,以我们的文件存储。 现在剩下的是将我们的公钥复制到该文件。

ssh [email protected] "cat /home/backup/backup_key.pub >>
/home/backup/.ssh/authorized_keys"

现在我们可以使用这个键来复制东西。

现在,让我们复制备份文件:

scp -i .ssh/id_rsa_backup
/backup/wordpress/wordpress-041713.tar.gz
[email protected]:/home/backup/backups

如果我们的密钥设置正确,文件将被复制,我们不会要求输入密码。 我们可以检查文件是否真的存在:

ssh [email protected] "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
[email protected]:/home/backup/backups

注意:这不是通常的做法,最好设置一个脚本,它执行所有的任务,然后调度脚本。 但为了本文的简洁,我们将使用该表单。

增量备份

但是如果我们在另一个服务器有我们自己的备份软件怎么办? 我们只是想同步数据,然后让其他服务器做备份工作。 此外,我们要保留文件戳。 然后我们使用rsync。 这里的用例是,我们只想逐步高于一切这一次复制在/ var / WWW / WordPress的到远程服务器,到/家庭/备份/快照/ WordPress的目录中。 这里是一个简单的命令来做所有:

ssh [email protected] "mkdir -p /home/backup/sync"
rsync -avz --delete -e "ssh -i /root/.ssh/id_rsa_backup"
/var/www/wordpress [email protected]:/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
[email protected]:/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  [email protected]:/home/backup/
有了这个设置,我们有一个基本的备份我们的数据设置为紧急情况。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK