我一直在协助的一个网站托管在一个网络主机上(不是我的选择),它只提供文件的 FTP(没有 shell 访问权限),并且只能从主机本身或 phpMyAdmin 访问数据库。
该网站在 Apache 上运行,PHP 版本为 5.3.13。
由于网站时常会发生一些不好和不可预见的事情,我希望对网站进行备份。我当然已经在本地拥有了大部分基础设施(数据库架构和网站源文件),但如果网站被黑客入侵或发生其他不好的事情,我的网站将一片空白。因此,我当然需要备份所有用户上传的媒体和数据库中的所有数据。
问题是,当我只有 FTP 访问权限而无法直接访问数据库时,我真的不确定如何以良好的方式做到这一点。有没有关于如何获得此站点的适当自动备份的建议,可以定期运行而不会有太多麻烦?
答案1
只需进行一些小改动,您就可以让它工作(如果下面的`不起作用,请尝试exec
,,,任何您可以尝试的system
方法passthru
)。如果您稍微动手,您还可以禁用这些限制,但我认为这里不是讨论它们的地方。
脚本如下:
<?php
`mysqldump -uUSERNAME -pPASSWORD DATABASE > dump.sql`;
`tar -cf backup.tar .`;
// Download backup.tar
unlink('backup.tar');
?>
当然,这只是基本知识,仅供您参考。为了确保安全,请设置一个受backup/
密码保护的目录.htaccess
,以便只有您才能使用密码下载它们,并将 backup.tar 放在那里。
如果您拥有这些级别的“shell 访问权限”,那么可能性是无穷无尽的。
答案2
phpMyAdmin 能够导出数据库,但大小和超时限制可能会使这不切实际。
如果您可以通过 FTP 访问 MySQL 数据文件,那么停止数据库然后复制文件可能是最好的选择。
答案3
鉴于您的设置,自动备份将会很困难。网络托管提供商是否有任何备份选项?能够运行 cron/计划任务吗?您可能已经知道,但 phpMyAdmin 可以执行 mysqldump,并且使用 FTP,您可以获取文件,但这不是自动的。
理论上,你可以以编程方式通过 FTP 连接到您的网络主机帐户并下载文件,并编写脚本下载 MySQL 数据转储,但这是对时间和资源的低效使用,并且在我看来,这不是一个正确的备份。
wget
您可能考虑的另一个选项是使用、等将您的网站镜像到本地或您选择的其他位置。curl
这将为您提供带有静态文件的静态网站版本,并在需要时帮助您恢复网站。这可以通过本地系统上的 cron 设置,但当然,恢复数据库的数据不包含在此选项中。
为了能够恢复到某个时间点,您需要查看定期进行的备份/快照——这是主机提供商必须向您提供的。
一些临别感想:
- 如果我的网络主机仅提供 FTP 访问,我会感到担心,因为 FTP 以明文形式传输凭据。
- 如果您预计会发生不好的事情,请列出清单,并看看如何解决它们。例如,sftp over ftp、强密码、限制对组件的访问等。
- 是时候寻找新的网络主机了吗?(_:
HTH,祝你好运!
答案4
您可以使用 cron 服务(请参阅http://www.cronjobservices.com/或者您的主机可能提供一个)与 MySQLDumper 结合使用(http://www.mysqldumper.net/) 如果您无权访问 shell。
如果您有权访问 shell(从您的描述来看我不这么认为)我建议您使用 mysqldump 和 cronjobs。
对于文件内容,您可以创建一个 php 脚本来压缩所有内容,但您仍然需要自己下载这些文件。