通用远程数据备份和下载 - 包括InnoDb支持

时间:2011-01-17 07:35:52

标签: php shared-hosting database-backups

我想要一个基于PHP的解决方案来备份远程服务器的数据库(只有数据而不是代码)并下载文件。我知道基于Shell的解决方案更适合做这样的事情(在本地系统上运行shell脚本并通过SSH连接到远程系统)但是要求有一个基于PHP的解决方案,其中知道URL和拥有数据库凭据就足够了非技术人员进行备份。 PHP脚本可以上传到远程服务器并执行。

以下是我想要的功能: -

  • 至少应该支持InnoDb引擎 - 应该导出外键约束。如果它支持所有其他引擎则没有坏处。
  • 在最大可能限制的情况下,应该可以在所有服务器上运行(我知道启用safe_mode的一些限制,exec()system()功能被禁用等等。)。我想要一个非常通用的解决方案,保证可以在任何地方使用。

  • 进程应进行密码验证(请求数据库凭据)。

现在,我正在分解事物并从基础开始。以下是我对目前的事情的假设和一些问题: -

  1. 我不确定是否可以在共享托管服务器中完全禁用execsystem等系统功能。如果他们被禁用以便无法覆盖,那么基于mysqldump的解决方案here将不会普遍适用。
    问题 - 但是,如果仅启用safe_mode以便系统功能可以对safe_mode_exec_dir内的文件执行,那么解决方案是否可以安全运行?

  2. 我问了一个关于security risks of doing this using PHP的问题,并且明白永远不应该创建备份文件(我假设,如果基于mysqldump的解决方案,需要先创建备份文件在网站空间中下载)。因此,解决方案不应该在那里创建备份文件(如果在其他位置创建,则没有问题) 问题但是,共享托管服务提供商会允许这样做吗?

  3. 我检查了各种通用用户贡献的PHP类,如phpmysqldump等,并没有找到使用系统命令进行备份的基于mysqldump的解决方案的用法。他们执行SHOW CREATE TABLE等操作来获取所有表创建,数据插入查询,然后下载这些内容而不将其实际保存为文件(因此没有安全风险)。
    问题 - 我是否正确地得出结论,他们在没有按照第一点的解决方案中给出的简单mysqldump执行所有这些操作,因为这不是一个通用且安全的解决方案?<登记/> 问题 - 另外,我读到没有任何好的工作正常。我个人只使用了这个phpmysqldump,当我尝试使用创建的备份恢复数据库时,它给了我mysql错误。转储文件中的查询与PhpMyAdmin的导出模块创建的查询略有不同。我还检查了一些其他免费用户贡献的PHP类。看起来它们中的大多数都不支持InnoDb支持,因此,如果数据库中存在关键约束,则导出中不存在。 问题 - 我猜,PhpMyAdmin本身的导出功能(如果单独存在)可能是我的解决方案。有没有人知道像这样的稳定​​库?

3 个答案:

答案 0 :(得分:2)

我认为你应该做的事情:

我认为您应该在您的服务器上安装phpmyadmin,这将允许您从工作/学校/咖啡馆/等访问您的数据库,MySQL-workbench更高级,并为您提供更多功能,以便您可以处理更改结构和编辑任何行/列,关系等等,看看phpmyadmin的功能,如果不是全部的话。

phpmyadmin它适用于任何网络浏览器:

我真的推荐phpMyAdmin它有许多SQL功能可以帮助你处理MySQL数据库中的所有内容,如果你使用的是innoDB,那么你会得到更多的功能,比如表之间的关系。

phpMyAdmin具有以下功能:

  • 直观的网络界面
  • 支持大多数MySQL功能:
  • 浏览和删除数据库,表格,视图,字段和索引
  • 创建,复制,删除,重命名和更改数据库,表,字段和索引
  • 维护服务器,数据库和表,以及有关服务器配置的提案
  • 执行,编辑和书签任何SQL语句,甚至批量查询
  • 管理MySQL用户和权限
  • 管理存储过程和触发器
  • 从CSV和SQL导入数据
  • 将数据导出为各种格式:CSV,SQL,XML,PDF,ISO / IEC 26300 - OpenDocument文本和电子表格,Word,Excel,LATEX等
  • 管理多台服务器
  • 创建数据库布局的PDF图形
  • 使用Query-by-example(QBE)创建复杂查询
  • 在数据库或其子集中全局搜索
  • 使用一组预定义函数将存储数据转换为任何格式,例如将BLOB数据显示为图像或下载链接
  • 还有更多......

上面列出的所有内容都包含在phpMyAdmin中,如果您运行的是debian或基于Debian的系统,只需运行:

root@debian:~ # aptitude install phpmyadmin
root@arch:~ # pacman -S phpmyadmin

顺便说一句:如果您没有使用Apache或lighttpd作为http-server,您需要读取phpmyadmin的conf文件,然后为phpmyadmin编写所需的conf脚本以使用您的http服务器。

MySQL workbench。它的跨平台并且运行良好。

MySQL workbench visurally see what you are doing with your database. http://diariolinux.com/wp-content/uploads/2008/08/wb51linuxpreview2a.png

顺便说一句:使用<ctrl>+<G>来转发工程师数据库,我花了一些时间来找到这个。

独立的perl文件在配置后立即工作:(未经测试)

use DBI;
my $user = "username";   # MySQL Username
my $pass = "xxxx";       # MySQL Password
my $host = "localhost";  # MySQL Host
my $mydb = "zzzz";       # MySQL Database
my $file = "test.sql";   # Import file
my $sqlServer = "mysql"; # What sql-server are we using, oracle/mysql/etc
    # I would use the following method to configure it, though the above works fine too.
($user,$pass,$host,$mydb,$file,sqlServer) = (
    "username",  # MySQL Username
    "password",  # MySQL Password
    "localhost", # MySQL Host
    "myDB",      # MySQL Database
    "test.sql",  # Imported file
    "mysql"      # What sql-server are we using, oracle/mysql/etc
);
    # Now lets connect to the MySQL server.
my $dbh  = DBI->connect("DBI:$sqlServer:$mydb:$host",$user,$pass)or die DBI->errstr();
    # Lets now open the .sql file.
open(INPUT,$file);
    # Now lets run each sql-statement.
while ($line = <INPUT>){
    print $line;
    $dbh->do($line);
    print "Query failed (run manually):\n$line\n\n ". $dbh->errstr()."\n" if $dbh->errstr();
}
    # Now close the file.
close(INPUT);

答案 1 :(得分:0)

PHPMyAdmin通常是一个很好的解决方案,但如果您只想进行备份,可能会有些过分。如果你想要一个通用的解决方案,那么绝对不要依赖于exec可用。 PHP结合正确的SQL查询(正如您在第3点中所述)可以为您提供所需的所有信息,并始终有效。

答案 2 :(得分:0)

根据我自己的经验,依赖基于PHP的备份解决方案是非常糟糕的主意。如果您正在处理大型备份,PHP很容易失败(由于超时,内存消耗或未定义的内容)。

我们已成功在我们的un * x服务器上使用Bacula(http://www.bacula.org/en/)多年。我们自己的备份脚本做了我们想做的事情。您需要对服务器进行shell访问。

如果您需要基于PHP的简单备份解决方案,那么最好自己编写。 :)