【发布时间】:2010-09-20 09:22:37
【问题描述】:
如何使用 PHP 备份 SQL 数据库。
是否有符合 ANSI SQL 的与供应商无关的方法来执行此操作?
如果不是,也许您可以列出每个数据库供应商的操作方法?
【问题讨论】:
如何使用 PHP 备份 SQL 数据库。
是否有符合 ANSI SQL 的与供应商无关的方法来执行此操作?
如果不是,也许您可以列出每个数据库供应商的操作方法?
【问题讨论】:
每个数据库系统都带有一些用于转储其内容的程序。
您可以使用 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');
?>
但是,不要这样做:
因为将密码作为命令行参数传输是very insecure。
<?php
header('Content-type: text/plain');
system('mysqldump -utestuser -ptestpassword test');
?>
【讨论】:
【讨论】:
这是一个相当复杂的过程。我建议你使用 phpmyadmin 或类似的。
【讨论】:
虽然备份“符合 ANSI SQL”的数据库是可能的并且令人钦佩,但您仍然会遇到可移植性问题。最明显的是,虽然 MySQL 的转储/恢复格式相当快,但它主要通过使用 SQL 的非标准扩展来实现这一点。所以你不能只把转储交给 PostGresql:它不起作用。事实上,PostGresql 在处理大量 INSERT 语句时也很慢。它的原生转储格式使用它自己的自定义 SQL 语句,针对一次插入大量数据进行了优化。
【讨论】: