2011-10-06 53 views
0

我面临的问题是我必须在工作中完成的任务。 我有一个MySQL数据库,它包含我公司的几个客户端的信息,我必须创建一个备份/恢复过程来为任何单个客户端备份和恢复这些信息。为了澄清,如果我的客户A正在丢失他的数据,我必须能够恢复这些数据,以确保我不修改客户端B,C的数据...我不是数据库管理员,所以我不' t知道我是否可以使用标准的mysql工具(如mysqldump)或任何其他备份工具(如Percona Xtrabackup)来执行此操作。针对单个客户端的MySQL备份多客户端数据库

要备份,我的研究(和我的直觉),导致我对这个不可能性的解决方案:

  1. 创建恢复使用insert-select语法插入语句(http://dev.mysql.com/doc /refman/5.1/en/insert-select.html);
  2. 保存此插入到一个SQL文件,以正确的顺序或允许此脚本暂时禁用外键检查,以满足外键的约束;
  3. 当然,我为每个客户在每天的基础上为每个客户(和每天)使用一个文件来做这件事。

然后,在情况下,我必须要恢复数据为特定客户:

  1. 我删除他的所有数据离开;
  2. 我使用我在备份过程中创建的sql文件来恢复正确的数据。

这样我相信我可以在不接触客户端B的数据的情况下恢复客户端A的正确数据。我的解决方案是否最终能够正常工作?有没有更好的方法来达到同样的结果?或者你需要更多关于我的问题的信息?

请原谅我,如果这个问题不是完整的,但我在这里是新的,这是我的第一个问题,所以我可能是非法的......谢谢你的帮助。

注意:我们也会用mysqldump备份整个数据库。

回答

0

您可以使用--where参数,您可以提供一个条件,如* client_id = N *。当然,我正在做一个假设,因为你没有提供关于你的模式的任何信息。

如果你有一个Star模式,那么你可以编写一个小脚本来备份所有查找表(考虑到它们足够小),使用这个参数--tables并为你的客户端使用- where条件数据表。为了获得额外的性能,也许可以通过client_id对表进行分区。

+0

谢谢......在这一刻我的桌子很小,所以它听起来是一个可用的解决方案!而你的假设也是正确的,我忘了将这个信息添加到我的问题! – ThanksForAllTheFish

+0

太棒了!如果你认为这个答案对你有好处,你会友好地将它标记为答案吗? :) – wisefish