我想以最少的努力备份网络服务器的内容。目前,我有一个 PHP 脚本,它为我提供了已上传图片的列表,然后我使用 wget 通过 HTTP 下载所有图片。
使用 PHP 脚本获取 MySQL 数据,该脚本转储我通过 HTTP 使用 wget 提取的数据库。
有没有办法从 FTP 下载所有内容?这样我就可以完全镜像网络服务器并跟踪任何更改?
遗憾的是,我只能在服务器上使用普通的 FTP 和 PHP,不能在服务器上使用 shell 脚本mysqldump
或。tar
答案1
我认为您需要几部分信息来重建 Web 服务器。站点的 html/jpg/script 文件、数据库数据和 Web 服务配置。如果您的网站依赖 SSl 证书、网络配置和用户信息,您可能需要添加这些内容。
一旦知道需要重建什么,我们如何获取这些数据?最简单的方法通常是从保存数据的盒子中获取。运行脚本来生成数据、数据库转储等,将其全部收集到 tar 文件中并通过 ftp 从盒子中取出。
或者,您可以将脚本作为 Web 服务器上的 cron 作业运行,但让您的外部机器来获取 tar 文件。
答案2
有没有什么方法可以从 FTP 下载所有内容?
是的,但您需要(或请别人)安装 FTP 服务器并为您配置。但我不建议这样做。FTP 以明文形式发送密码,据我所知,没有常见的 SSL 包装器(如启动TLS) 。因此,FTP 是一个安全漏洞,除非您计划使用安全的 VPN。我建议使用安全FTP,其本质上是一个响应类似 ftp 命令的 ssh 连接。
这是动态服务器吗?它有 PHP 或 CGI 或任何其他服务器端代码吗?如果是,则 HTTP 请求只能在代码运行时显示 HTML,而不是底层源代码。这是不是备份。您应该使用 sftp 备份源。
至于 MySQL,同样,您没有进行真正的备份。您应该熟悉它mysqldump
或找人为您运行它。
至于如何处理这些文件,备份到 git 需要您编写一些脚本。通常人们会备份所有文件(包括您的数据库转储),并保留n几天的时间。如果您备份到源代码控制,现在您需要备份您的存储库并担心损坏。通常更清洁的是只保留文件。您的源代码无论如何都应该在源代码控制中,并且它应该与网站上的内容相匹配。
我个人觉得‘如果我解压这个文件,它就是我的网站’比‘如果我的 git 存储库没有被 gorked,我可以找到当天的标签,它就是我的网站’更舒服。在紧急情况下(所有备份恢复都是如此),复杂性并不是你想要的。
答案3
为了解决我只有 FTP 的问题,我最终得到了一个巧妙的解决方案:curlftpfs 和 rsync。
# Create a mountpoint for the FTP.
tempdir=$(mktemp -d)
chgrp fuse "$tempdir"
chmod 700 "$tempdir"
# Mount the FTP
curlftpfs "$server" "$tempdir"
# Copy all the new data into the current directory
rsync -avE --delete "$tempdir/$subfolder" "$current"
# Release the mounted FTP
fusermount -u "$tempdir"
rmdir "$tempdir"