【发布时间】:2011-01-17 07:35:52
【问题描述】:
我想要一个基于 PHP 的解决方案来备份远程服务器的数据库(仅数据而不是代码)并下载文件。我知道基于 Shell 的解决方案更适合做这些事情(在本地系统上运行 shell 脚本并通过 SSH 连接到远程系统),但需要有一个基于 PHP 的解决方案,其中知道 URL 并拥有数据库凭据就足够了非技术人员进行备份。 PHP脚本可以上传到远程服务器并执行。
以下是我想要的功能:-
- 至少应该支持 InnoDb 引擎 - 应该导出外键约束。如果它支持所有其他引擎,则无害。
应该在所有服务器上工作,存在最大可能数量的限制(我知道一些限制,如启用
safe_mode、exec()、system()功能禁用等)。我想要一个非常通用的解决方案,保证在任何地方都可以工作。进程应通过密码验证(要求提供数据库凭据)。
现在,我正在分解事物并从最基本的开始。以下是我对目前情况的假设和一些问题:-
我不确定是否可以在共享托管服务器中完全禁用
exec、system等系统功能。如果它们被禁用以致无法被覆盖,那么基于mysqldump的解决方案给定here 将无法普遍工作。
问题 - 但是如果只有safe_mode在这样的系统上函数可以在safe_mode_exec_dir中存在的文件上执行,该解决方案能否安全运行?-
我问了一个关于 security risks of doing this using PHP 的问题,并了解到不应该在网络空间。因此,该解决方案不应该需要在那里创建备份文件(如果在其他位置创建没有问题)。
问题 - 但是,共享托管服务提供商是否允许这样做? 我检查了各种通用用户贡献的 PHP 类,如 phpmysqldump 等,但没有找到使用系统命令进行备份的基于
mysqldump的解决方案的用法。他们会执行SHOW CREATE TABLE等操作来创建所有表、数据插入查询,然后下载这些内容而不实际将其保存为文件(因此没有安全风险)。
问题 -我是否正确地得出结论,他们没有按照第一点的解决方案中给出的简单mysqldump做所有这些事情,因为这不是通用且安全的解决方案?
问题 -另外,我读到没有任何好的方法可以很好地工作。我个人只使用了这个phpmysqldump,当我尝试使用创建的备份恢复数据库时,它给了我 mysql 错误。转储文件中的查询看起来也与 PhpMyAdmin 的导出模块创建的查询有些不同。我还检查了其他一些免费用户贡献的 PHP 类。看起来它们中的大多数不支持 InnoDb 支持,因此外键约束(如果存在于数据库中)不会出现在导出中。
问题 - PhpMyAdmin 本身的导出功能(如果存在)我想,单独可能是我的解决方案。有人知道像这样的稳定库吗?
【问题讨论】:
-
好问题。相关(但更多关于文件备份方面):stackoverflow.com/questions/4576025/web-site-backup-in-php
-
@Pekka 谢谢。是的,我检查了您的问题,但我认为它涉及一些更高级的问题。我仍然坚持更基本的事情,坦率地说,你的问题似乎超出了我的想象 :) 如果你至少可以清除我在这里提出的一些基本疑问?谢谢
-
mysqldump 默认写入标准输出,因此您实际上不需要临时文件。更不用说,如果处理得当,临时人员并不是真正的安全风险。
-
@derobert:你的意思是在
mysqldump的情况下不需要创建实际的临时文件并且可以直接下载输出吗?您还可以提供更多关于如何正确执行以避免安全风险的线索吗?谢谢 -
@Sandeepan 是的,这是一个复杂的问题 :) 不过一般来说:如果临时文件存储在 Web 根目录之外,则不是问题。大多数物有所值的供应商都提供了这样做的可能性。您不能依赖
mysqldump出现在共享主机包上,这就是这些脚本使用SHOW CREATE TABLE等的原因。但是,无论您最终采用何种解决方案,确保彻底测试它。我见过并使用过 PHP mysql 备份脚本,这些脚本只会产生损坏的数据。
标签: php shared-hosting database-backups