共计 4782 个字符,预计需要花费 12 分钟才能阅读完成。
导读 | 本文提供了一种快速方法来备份典型 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: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/
有了这个设置,我们有一个基本的备份我们的数据设置为紧急情况。