我想要一个基于 PHP 的解决方案来备份远程服务器的数据库(只有数据而不是代码)并下载文件。我知道基于 Shell 的解决方案更适合做这些事情(在本地系统上运行 shell 脚本并通过 SSH 连接到远程系统),但需要有一个基于 PHP 的解决方案,其中知道 URL 并拥有数据库凭据就足够了非技术人员进行备份。PHP 脚本可以上传到远程服务器并执行。
以下是我想要的功能:-
- 至少应该支持 InnoDb 引擎 - 应该导出外键约束。如果它支持所有其他引擎,则没有害处。
在存在最大可能限制的情况下,应该在所有服务器上工作(我知道一些限制,例如
safe_mode
启用、exec()
禁用system()
功能等)。我想要一个非常通用的解决方案,它可以保证在任何地方都可以工作。进程应通过密码验证(要求提供数据库凭据)。
现在,我正在分解事物并从最基本的开始。以下是我迄今为止对事物的假设和一些问题:-
我不确定是否可以在共享托管服务器中完全禁用诸如等
exec
系统功能。system
如果它们被禁用以致无法被覆盖,那么此处mysqldump
给出的基于解决方案将无法普遍工作。问题 -如果只是这样,系统功能可以在内部存在的文件上执行,该解决方案是否可以安全地工作?
safe_mode
safe_mode_exec_dir
我问了一个关于使用 PHP 执行此操作的安全风险的问题,并了解不应该
mysqldump
在网络空间中创建备份文件(我假设,在基于解决方案的情况下,需要先创建备份文件,然后再下载)。因此,该解决方案不需要在那里创建备份文件(如果在其他位置创建也没有问题)。
问题 -但是,共享主机提供商会允许这样做吗?我检查了各种通用用户贡献的 PHP 类,如phpmysqldump等,并没有找到
mysqldump
使用系统命令进行备份的基于解决方案的用法。他们做诸如此类的事情SHOW CREATE TABLE
来获取所有的表创建、数据插入查询,然后下载这些东西而不实际将其保存为文件(因此没有安全风险)。
问题 -我是否正确地得出结论,他们做了所有这些事情而没有mysqldump
按照第一点的解决方案中给出的简单操作,因为这不是通用且安全的解决方案?
问题 -另外,我读到没有任何好的方法可以很好地工作。我个人只使用了这个phpmysqldump当我尝试使用创建的备份还原数据库时,它给了我 mysql 错误。转储文件中的查询看起来也与 PhpMyAdmin 的导出模块创建的查询有些不同。我还检查了其他一些免费用户贡献的 PHP 类。看起来他们中的大多数不支持 InnoDb 支持,因此外键约束,如果存在于数据库中,则不存在于导出中。
问题 -我猜,PhpMyAdmin 本身的导出功能(如果单独存在的话)可能是我的解决方案。有人知道像这样的稳定库吗?