Mysqldump混乱?

Mysqldump混乱?
  • 如果我在转储生产数据时锁定表,同时用户为特定表输入任何数据。该特定插入会发生什么?它会被丢弃还是会在成功创建转储后插入?
  • 如果我在转储生产数据时不锁定表,会产生什么问题吗?

  • 对于有或没有锁定表的情况,哪一种是转储生产的首选方法?

答案1

  • 如果您使用 mysqldump 备份您的表并且有人试图修改锁定的表,他们的更新将被阻止,直到 mysqldump 解锁该表。
  • 如果您在尝试进行备份时没有锁定表,则您的备份很可能会处于不一致的状态。根据您的应用程序,这可能会导致问题。
  • 正如 @tsykoduk 所说,最好从生产服务器的只读副本中获取备份。如果这不可能,最佳解决方案取决于您的环境。例如,如果您仅使用 InnoDB 表,则可以运行 mysqldump 以--single-transaction确保一致的备份而不会阻止更新。

MySQL 文档更详细地描述了大多数这些选项:

http://dev.mysql.com/doc/refman/5.1/en/backup-methods.html

答案2

最好从只读副本中获取备份,因为锁定表时,任何写入都会出错。此外,备份可能是一项非常耗费资源的操作,因此会影响性能。

如果你没有只读副本,那么我建议你研究一下 MySQL 热备份产品(Percona 有一个很好的, 据我回忆)。

此外,如果您不锁定表或使用热备份产品,则存在无法获得完整备份的风险。例如,如果有人正在写入表,并且在运行备份时将其锁定,您将获得损坏的数据。

相关内容