我如何使用 PHP 备份 SQL 数据库。
是否有符合 ANSI SQL 的与供应商无关的方法来执行此操作?
如果不是,也许您可以列出如何为每个数据库供应商做这件事?
每个数据库系统都带有一些用于转储其内容的程序。
system()
您可以使用或简单地从 PHP 调用该程序shell_exec()
。
例如,如果您使用启用了Ident 身份验证的 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');
?>
因为将密码作为命令行参数传输是非常不安全的。
这是一个相当复杂的过程。我建议你使用 phpmyadmin 或类似的。
虽然备份“符合 ANSI SQL”的数据库是可能的并且令人钦佩,但您仍然会遇到可移植性问题。最明显的是,虽然 MySQL 的转储/恢复格式相当快,但它主要通过使用 SQL 的非标准扩展来实现这一点。所以你不能只把转储交给 PostGresql:它不起作用。事实上,PostGresql 在处理大量 INSERT 语句时也很慢。它的原生转储格式使用它自己的自定义 SQL 语句,该语句针对一次插入大量数据进行了优化。