如何在Ubuntu云服务器上自动备份网站?

  • 发布时间:2021-10-09 14:06:39
  • 阅读次数:1919

这是一篇具有实际操作价值的文章,详细介绍了自动备份网站数据和配置文件的步骤。以一台安装了Ubuntu操作系统的云服务器为例,使用tar、rsync和cron工具,备份脚本每天执行一次,保留最近一年的数据。备份策略方面,我们采用了3-2-1备份原则,数据有三个副本。除了一个工作副本之外,还有一个存储在本地不同介质,一个异地备份。举个例子,你有一张照片,它存储在你家的电脑里,这是第一个本地副本。这张照片还存储在一块移动硬盘上,这是第二个本地副本。你在云盘也存储了一份,这就是第三个副本。

1、准备工作

在创建备份之前,请确保云服务器有足够的磁盘空间。可通过以下命令查看总磁盘空间、网站数据大小、配置文件大小。网站数据和配置文件的目录可根据实际情况调整。

$ df -h
$ du -sh /var/www
$ du -sh /etc/apache2

当确认有足够的磁盘空间用于备份时,就可以创建存放备份文件的目录了。

$ sudo mkdir /var/web_backup

2、执行备份

用tar工具创建网站数据和配置文件的备份,备份名假设为web-server.tar.gz。

$ sudo tar -cvzpf /var/web_backup/web-server.tar.gz -C /var/ www -C /etc/ apache2

以上命令涉及到的选项参数解释如下:

  • c:创建压缩包
  • v:输出详细信息
  • z:使用gzip压缩
  • p:保留文件权限
  • f:压缩包的路径和文件名
  • C:更改目录

需要注意/var/和/etc/后面的空格。如果还有其他目录需要备份的,在-C选项后面加上这些目录。

要从压缩包中排除某些文件,使用--exclude=path/to/file/选项。例如要排除/var/www/example.com/junk/目录,使用以下命令。

$ sudo tar -cvpzf /var/web_backup/web-server.tar.gz --exclude=www/example.com/junk -C /var/ www -C /etc/ apache2

注意:在排除文件时,要使用相对路径而不是绝对路径。以上例子中使用的是www/example.com/junk,而不是/var/www/example.com/junk。如果有多个文件需要排除,就使用多个--exclude选项。也可以把需要排除的文件列表放到一个排除文件中。

3、测试恢复

在自动化整个备份恢复流程之前,应确保可以恢复成功。我们先创建一个用于恢复的目录,然后执行解压命令。

$ sudo mkdir /var/web_backup/restored/
$ sudo tar -xvzpf /var/web_backup/web-server.tar.gz -C /var/web_backup/restored/ 

以上命令涉及到的选项参数解释如下:

  • x:提取文件
  • z:解压文件

然后验证恢复后的文件内容,如果没有问题,删除恢复目录。

$ ls -lh /var/web_backup/restored/
$ sudo rm -r /var/web_backup/restored/

4、自动化流程

cron工具可以在指定的时间执行命令行。在这个例子中,我们在凌晨2点钟执行备份,保留最近一周的备份,并且使用日期对备份文件进行命名。

$ sudo tar -cvpzf /var/web_backup/web-server.`date +\%a`.tar.gz -C /var/ www -C /etc/ apache2

以上命令中,+\%a参数代表星期的简称,比如Mon(周一)、Tue(周二)等。tar命令会覆盖上周同一天的备份文件。

cron自动任务存储在名为crontab的文件中。一个典型的自动任务以5个数值或星号开头,然后是一行命令。数值代表执行自动任务的时间,星号代表全部时间。这5个数值分别代表分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7)。

要编辑crontab文件,执行以下命令。

$ sudo crontab -e

在文件末尾增加以下自动任务。该任务代表每天凌晨2点执行一次。

0 2 * * * sudo tar -cvpzf /var/web_backup/web-server.`date +\%a`.tar.gz -C /var/ www -C /etc/ apache2

要改成每月备份一次,使用另一个+\%b参数代表月份的简称。以下任务代表每月1号凌晨0点执行,保留最近一年的备份。

0 0 1 * * sudo tar -cvpzf /var/web_backup/web-server.`date +\%b`.tar.gz -C /var/ www -C /etc/ apache2

5、异地备份

为了完成3-2-1备份原则中的异地备份,我们要用rsync工具从Web服务器中下载备份。请确保Web服务器和备份服务器都安装了rsync。Ubuntu操作系统默认不安装rsync,在备份服务器中执行以下命令进行安装,并创建备份目录。

$ sudo apt install rsync
$ mkdir server_backup

执行以下rsync命令,下载Web服务器的网站数据到备份服务器中。

$ rsync -azP --delete username@remotehost:/var/webbackup/ /path/to/offsite/server_backup

以上命令涉及到的选项参数解释如下:

  • a:压缩全部文件,同时保留超级链接和文件权限等。
  • z:在传输过程中压缩文件
  • P:--partial和--progress的合并,传输中断时保留部分文件,并且显示传输的过程。
  • --delete:从备份目录中删除无关文件。谨慎使用该选项,可先用--dry-run选项进行测试,避免数据丢失。

要从rsync中排除某些文件,使用--exclude=relative/path/to/file/选项。例如要排除周三的备份,使用以下命令。

$ rsync -azP --delete --exclude=web-server.Wed.tar.gz username@remote_host:/var/web_backup/ /path/to/offsite/server_backup

注意:在排除文件时,要使用相对路径而不是绝对路径。以上例子中使用的是web-server.Wed.tar.gz,而不是/var/web_backup/web-server.Wed.tar.gz。如果有多个文件需要排除,就使用多个--exclude选项。

6、rsync免密码登录

我们的目标是自动化全部流程,因此需要设置rsync免密码从备份服务器登录到Web服务器。

在备份服务器上创建rsync的密钥对:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

然后把公钥复制到Web服务器中,这样备份服务器就可以无需密码从Web服务器中下载文件了。

$ ssh-copy-id -i ~/.ssh/id_rsa_rsync username@remote_host

在备份服务器上执行以下命令,测试rsync免密码登录。

$ rsync -azP --delete -e 'ssh -i ~/.ssh/id_rsa_rsync' username@remote_host:/var/web_backup/ /path/to/offsite/server_backup

7、自动化全部流程

在备份服务器上编辑crontab:

$ sudo crontab -e

在文件末尾增加以下自动任务。该任务代表每天凌晨3点执行一次。

0 3 * * * rsync -azP --delete -e 'ssh -i ~/.ssh/id_rsa_rsync' username@remote_host:/var/web_backup/ /path/to/offsite/server_backup

综上,我们已经根据3-2-1备份原则完成了在Ubuntu云服务器上自动备份网站的过程。网站数据每天备份一次,包括本地备份和异地备份,备份数据保留一年。

【全文完】

< 上一篇:向云服务器上传数据的几种方法 下一篇:Linux系统文件操作提示Read-only file system的解决办法 >