有没有办法使用PHP只从MySQL数据库表中备份数据?
答案 0 :(得分:2)
查看http://davidwalsh.name/backup-mysql-database-php并删除他生成用于重新创建结构的sql命令的部分。
答案 1 :(得分:1)
使用SHOW TABLES
(http://dev.mysql.com/doc/refman/5.0/en/show-tables.html)获取每个表,使用SELECT * FROM -tablename-
使用PHP循环它们。然后循环此记录集,使用implode(',' $results)
获取数据(CSV)。当然,您可能希望为每个表创建单独的内容。
答案 2 :(得分: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-info排除所有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文件,则恢复该备份将变得更加困难。