2011-05-06 123 views
1

是否有使用PHP只能从MySQL数据库表使数据备份的方法吗?备份mysql数据

+1

是的。就在这里。 – 2011-05-06 10:53:43

+0

这当然是可能的。也就是说,你可以在你的操作环境中执行标准的'mysqldump'命令吗? (如果你可以使用这种方法,这将会是一个很大的麻烦。) – 2011-05-06 10:54:51

+0

我可以,但是mysqldump也需要这个结构 - 不是吗? – user398341 2011-05-06 10:55:58

回答

1

使用SHOW TABLES(http://dev.mysql.com/doc/refman/5.0/en/show-tables.html)来获取每个表格,使用SELECT * FROM -tablename-通过PHP循环它们。然后循环记录集,使用implode(',' $results)获取数据(CSV)。你可能想为每个表格创建一个独立的或某物。

0

您同意,你想“要的原始数据(例如:如CSV),而不是任何形式的INSERT语句” - 但你已经接受了答案确实恰恰是后者,例如使用这行代码:

$return.= 'INSERT INTO '.$table.' VALUES('; 

这很好,如果这是真的,你想要什么,但如果我是你,我会再只是做一个系统调用来代替mysqldump的。您可以使用mysqldump以安全,稳健的方式生成一组INSERT INTO语句,而无需担心“我是否关闭了双引号?是否应该在此处添加逗号?”等

我不知道为什么你不想要导出模式,以及 - 如果指定--add-drop-table在那么你的数据库转储成为了一个漂亮,整洁,如果你的整个数据库的恢复最坏的情况发生 - 但如果你只是想导出数据,并可以进行系统调用在PHP脚本mysqldump的,you could run

mysqldump --skip-triggers --compact --no-create-info db_name | gzip -c > /tmp/db_name_backup.sql.gz 

--no创建,信息不包括所有的CREATE TABLE语句;但正如我所说的,我宁愿包括CREATE和DROP IF EXISTS,所以你有一个完整的数据和模式备份。

我真的推荐使用mysqldump生成的SQL进行备份 - MySQL天生理解,并且正确处理编码,空白等 - 而不是像CSV那样 - AFAIK实际上没有任何一种国际公认的标准,并且可以“T通过管道输送回的MySQL在以后的日子来恢复数据库:

gunzip -c < /tmp/db_name_backup.sql.gz | mysql db_name 

如果您的备份是不是为每一台单独的CSV文件,恢复备份成为一个更为艰巨的任务。

+0

我可以在没有压缩的情况下完成吗?此外 - 我正在使用PDO - 任何示例我应该如何使用它? – user398341 2011-05-06 16:06:58

+0

另一个问题是关系 - 恢复时 - 表之间的关系可能会造成问题,如果命令不按照正确的顺序执行 - 因此手动备份让我对如何对其进行备份一下表为了多一点的控制和使用。是否有一个选项可以将所有带有FOREIGN KEYS的ALTER语句放在文件末尾? – user398341 2011-05-06 16:09:50

+0

对不起 - 通过原始数据我的意思是 - 只包含数据的sql语句 - 没有数据库结构 - 所以它会包含INSERT语句。 – user398341 2011-05-06 16:11:09