![Mysqldump混乱?](https://linux22.com/image/543538/Mysqldump%E6%B7%B7%E4%B9%B1%EF%BC%9F.png)
- 如果我在转储生产数据时锁定表,同时用户为特定表输入任何数据。该特定插入会发生什么?它会被丢弃还是会在成功创建转储后插入?
如果我在转储生产数据时不锁定表,会产生什么问题吗?
对于有或没有锁定表的情况,哪一种是转储生产的首选方法?
答案1
- 如果您使用 mysqldump 备份您的表并且有人试图修改锁定的表,他们的更新将被阻止,直到 mysqldump 解锁该表。
- 如果您在尝试进行备份时没有锁定表,则您的备份很可能会处于不一致的状态。根据您的应用程序,这可能会导致问题。
- 正如 @tsykoduk 所说,最好从生产服务器的只读副本中获取备份。如果这不可能,最佳解决方案取决于您的环境。例如,如果您仅使用 InnoDB 表,则可以运行 mysqldump 以
--single-transaction
确保一致的备份而不会阻止更新。
MySQL 文档更详细地描述了大多数这些选项:
答案2
最好从只读副本中获取备份,因为锁定表时,任何写入都会出错。此外,备份可能是一项非常耗费资源的操作,因此会影响性能。
如果你没有只读副本,那么我建议你研究一下 MySQL 热备份产品(Percona 有一个很好的一, 据我回忆)。
此外,如果您不锁定表或使用热备份产品,则存在无法获得完整备份的风险。例如,如果有人正在写入表,并且在运行备份时将其锁定,您将获得损坏的数据。