【问题标题】:MySQL backup multi-client DB for single clientMySQL 为单个客户端备份多客户端数据库
【发布时间】:2011-10-06 16:58:56
【问题描述】:

我在工作中必须完成的任务遇到问题。 我有一个 MySQL 数据库,它保存着我公司的几个客户的信息,我必须创建一个备份/恢复程序来为任何单个客户备份和恢复这些信息。澄清一下,如果我的客户 A 丢失了他的数据,我必须能够恢复这些数据,确保我没有修改客户 B、C、... 我不是数据库管理员,所以我不知道我是否可以使用标准的 mysql 工具(如 mysqldump)或任何其他备份工具(如 Percona Xtrabackup)来做到这一点。

作为备份,我的研究(和我的直觉)引导我找到了这个可能的解决方案:

  1. 使用插入选择语法创建恢复插入语句 (http://dev.mysql.com/doc/refman/5.1/en/insert-select.html);
  2. 将此插入保存到 sql 文件中,以正确的顺序或允许此脚本暂时禁用外键检查以满足外键的约束;
  3. 当然,我每天为所有客户执行此操作,并为每个客户(和一天)使用一个文件。

然后,如果我必须为特定客户端恢复数据:

  1. 我删除了他剩下的所有数据;
  2. 我使用他在备份期间创建的 sql 文件恢复了正确的数据。

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

如果这个问题的格式不正确,请原谅我,但我是新来的,这是我的第一个问题,所以我可能不准确......无论如何感谢您的帮助。

注意:我们还将使用 mysqldump 备份整个数据库。

【问题讨论】:

    标签: mysql database-backups mysql-backup


    【解决方案1】:

    您可以使用 --where 参数,您可以提供像 *client_id=N* 这样的条件。当然,我是在做一个假设,因为您没有提供有关架构的任何信息。

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

    【讨论】:

    • 谢谢...此时我的桌子很小,所以这听起来是一个可用的解决方案!而且您的假设也是正确的,我忘了在我的问题中添加该信息!
    • 太棒了!如果您认为此答案对您有好处,您是否愿意将其标记为答案? :)
    猜你喜欢
    • 2020-12-25
    • 2020-08-22
    • 2011-11-30
    • 2015-09-24
    • 2011-03-31
    • 2017-11-28
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多