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

Php 通用远程数据备份和下载-包括InnoDb支持,php,shared-hosting,database-backups,Php,Shared Hosting,Database Backups,我想要一个基于PHP的解决方案来备份远程服务器的数据库(只有数据而不是代码)并下载文件。我知道基于Shell的解决方案更适合做这些事情(在本地系统上运行Shell脚本,并通过SSH连接到远程系统),但需要有一个基于PHP的解决方案,在这个解决方案中,知道URL和拥有数据库凭据就足以让非技术人员进行备份。PHP脚本可以上传到远程服务器并执行 以下是我想要的功能:- 至少应支持InnoDb引擎-应导出外键约束。如果它支持所有其他发动机,则不会造成伤害 应能在所有服务器上工作,且存在最大限度的限制(

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

以下是我想要的功能:-

  • 至少应支持InnoDb引擎-应导出外键约束。如果它支持所有其他发动机,则不会造成伤害
  • 应能在所有服务器上工作,且存在最大限度的限制(我知道一些限制,如启用了
    安全模式
    exec()
    system()
    功能禁用等)。我想要一个非常通用的解决方案,它保证在任何地方都能工作

  • 进程应通过密码验证(要求提供数据库凭据)

现在,我把事情分解,从最基本的开始。以下是我到目前为止对事情的假设和一些问题:-

  • 我不确定诸如
    exec
    system
    等系统功能是否可以在共享主机服务器中完全禁用。如果它们被禁用而无法被覆盖,那么基于
    mysqldump
    的解决方案将无法普遍工作。
    问题-但是,如果只启用了
    安全模式
    ,系统功能可以在
    安全模式
    执行目录中的文件上执行,那么解决方案能否安全工作

  • 我问了一个关于备份文件的问题,并理解不应该在Web空间中创建备份文件(我假设,在基于
    mysqldump
    的解决方案中,需要在下载之前先创建备份文件)。因此,解决方案不需要在那里创建备份文件(如果在其他位置创建,则没有问题)。
    问题-但是,共享主机提供商是否允许这样做

  • 我查看了各种由用户贡献的通用PHP类,如etc,没有发现使用系统命令进行备份的基于
    mysqldump
    的解决方案的用法。他们执行类似于
    SHOW CREATE TABLE
    等操作,以获取所有的表创建、数据插入查询,然后下载这些内容,而不实际将其保存为文件(因此没有安全风险)。
    问题-我的结论正确吗?他们没有像第一点中的解决方案那样做简单的
    mysqldump
    ,因为这不是一个通用且安全的解决方案?
    问题-此外,我读到没有任何好的方法可以很好地工作。我个人只使用了这个,当我试图用创建的备份恢复数据库时,它会给我带来mysql错误。转储文件中的查询看起来也与PhpMyAdmin的导出模块创建的查询有些不同。我还检查了其他几个免费用户贡献的PHP类。看起来它们中的大多数不支持InnoDb支持,因此如果数据库中存在外键约束,则导出中不存在外键约束。
    问题-PhpMyAdmin本身的导出功能,如果单独提供,我想可能是解决方案。有人知道像这样稳定的图书馆吗

  • 我认为你应该做的是: 我认为您应该在服务器上安装phpmyadmin,这将允许您从work/school/cafe/等访问您的数据库,MySQL workbench更高级,为您提供了更多功能,因此您可以处理更改结构和编辑任何行/列、关系等问题,请查看phpmyadmin的功能,如果不是全部的话,也是最多的

    phpmyadmin它可以在任何web浏览器中工作: 我真的推荐phpMyAdmin,它有许多SQL特性来帮助您处理MySQL数据库的所有问题。如果您使用innoDB,那么您将获得更多特性,例如表之间的关系

    具有以下特点:
    • 直观的web界面
    • 支持大多数MySQL功能:
    • 浏览和删除数据库、表、视图、字段和索引
    • 创建、复制、删除、重命名和更改数据库、表、字段和索引
    • 维护服务器、数据库和表,以及服务器配置建议
    • 执行、编辑任何SQL语句并为其添加书签,甚至是批处理查询
    • 管理MySQL用户和权限
    • 管理存储过程和触发器
    • 从CSV和SQL导入数据
    • 将数据导出为各种格式:CSV、SQL、XML、PDF、ISO/IEC 26300-OpenDocument文本和电子表格、Word、Excel、LATEX和其他格式
    • 管理多台服务器
    • 创建数据库布局的PDF图形
    • 使用示例查询(QBE)创建复杂查询
    • 在数据库或其子集中全局搜索
    • 使用一组预定义的函数将存储的数据转换为任何格式,如将BLOB数据显示为图像或下载链接
    • 还有更多
    上面列出的所有内容都包含在phpMyAdmin中,如果您运行的是debian或基于debian的系统,只需运行:

    root@debian:~ # aptitude install phpmyadmin
    root@arch:~ # pacman -S phpmyadmin
    
    顺便说一句:如果您没有在http服务器上使用Apache或lighttpd,则需要通读phpmyadmin的conf文件,然后编写phpmyadmin所需的conf脚本,以便与http服务器一起使用

    . 它的跨平台和工作非常好。

    顺便说一句:使用
    +
    对数据库进行正向工程,我花了一段时间才发现这一点

    仅在配置后工作的独立perl文件:(未测试)
    使用DBI;
    我的$user=“username”;
    
    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);