【问题标题】:How do i backup a SQL database using PHP?如何使用 PHP 备份 SQL 数据库?
【发布时间】:2010-09-20 09:22:37
【问题描述】:

如何使用 PHP 备份 SQL 数据库。

是否有符合 ANSI SQL 的与供应商无关的方法来执行此操作?

如果不是,也许您可​​以列出每个数据库供应商的操作方法?

【问题讨论】:

    标签: php sql backup


    【解决方案1】:

    每个数据库系统都带有一些用于转储其内容的程序。

    您可以使用 system() 从 PHP 中简单地调用该程序 或shell_exec()

    例如,如果您使用启用了 Ident authentication 的 PostgreSQL,并希望将数据库 test 直接作为 SQL 文本转储到浏览器,则很简单:

    <?php
    header('Content-type: text/plain');
    system('pg_dump test');
    ?>
    

    使用 MySQL 时,数据库用户和密码存储在 ~/.my.cnf 中,也很简单:

    <?php
    header('Content-type: text/plain');
    system('mysqldump test');
    ?>
    

    但是,不要这样做:

    <?php
    header('Content-type: text/plain');
    system('mysqldump -utestuser -ptestpassword test');
    ?>
    
    因为将密码作为命令行参数传输是very insecure

    【讨论】:

    • 我是否认为您也可以通过 SQL 查询执行此操作?一些共享主机提供商不允许系统调用。
    • 如果您有一个不允许 system() 或 shell_exec() 的托管服务提供商,您应该改用严肃的。这样的限制并没有真正增加安全性。这只会惹恼客户。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      这是一个相当复杂的过程。我建议你使用 phpmyadmin 或类似的。

      【讨论】:

        【解决方案4】:

        虽然备份“符合 ANSI SQL”的数据库是可能的并且令人钦佩,但您仍然会遇到可移植性问题。最明显的是,虽然 MySQL 的转储/恢复格式相当快,但它主要通过使用 SQL 的非标准扩展来实现这一点。所以你不能只把转储交给 PostGresql:它不起作用。事实上,PostGresql 在处理大量 INSERT 语句时也很慢。它的原生转储格式使用它自己的自定义 SQL 语句,针对一次插入大量数据进行了优化。

        【讨论】:

          猜你喜欢
          • 2021-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多