介绍
本文提供了一种快速方法来备份典型Web托管方案中最常见的内容:网站文件和数据库数据。 我们将设置网站文件夹的完整每日备份,并将此数据复制到远程服务器(这也可以用于另一个VPS)。 我们还将设置一个rsync示例来复制增量更改。 最后,我们将设置MySQL数据库的备份。 所描述的过程使用几个简单的Bash命令,rsync和cron来计划备份。 例如数据,我们可以安装WordPress按照 。 它将把WordPress的在/ var / WWW / WordPress的目录和MySQL数据库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:
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/
有了这个设置,我们有一个基本的备份我们的数据设置为紧急情况。