【问题标题】:Mysqldump --single-transaction optionMysqldump --single-transaction 选项
【发布时间】:2017-01-16 18:49:59
【问题描述】:

有人能解释一下 mysqldump --single-transaction 是如何真正适用于事务表的,比如 InnoDB 吗?我已经阅读了官方documentation,但仍然没有胶水。它是否像--lock-tables 那样执行每个表锁而不是全局锁?此外,mysqldump 将--opt 作为默认选项运行,其中包括--lock-tables,但它们与--single-transaction 互斥,如上面的文档链接中所述。在单个 mysqldump 命令中使用--single-transaction 时,我应该使用--skip-opt 吗?

我需要转储大小约为 700 Gb 的 InnoDB 表,我正在寻找正确的命令来实现这一点。目前我使用以下一种:

 mysqldump -B my_db --quick --single-transaction --max_allowed_packet=512M --compress --order-by-primary

提前致谢。

【问题讨论】:

  • 为什么不直接查看输出文件看看它做了什么?
  • 您会在转储期间访问表吗?写吗?
  • 相反,请参阅 Percona 的 Xtradbdump。
  • @RickJames 我在 AWS RDS 上运行了 mysql。由于 RDS 不提供对数据库文件的直接访问,因此无法使用 Percona 的 Xtradbdump。我从 RDS 只读副本创建转储,因此在此过程中复制仍然有效。
  • 来自this AWS RDS 指南,他们还建议使用--single-transaction 选项。我只是想详细了解它是如何工作的。

标签: mysql database transactions innodb


【解决方案1】:

--single-transaction 表示“转储期间 InnoDB 表发生的任何更改都不会包含在转储中”。因此,实际上,转储是转储开始瞬间的数据库快照,无论转储需要多长时间。

由于锁的交互方式,这会减慢表的速度,甚至可能停止写入。例如,考虑在转储期间运行ALTER TABLEDROP TABLE,以及同一张表上的其他操作。

--lock-tables 对于 MyISAM 表很有用。

通常建议使用--opt。我认为它与上述选项无关。

【讨论】:

  • 根据 MySQL 文档,在 mysqldump --single-transaction 期间其他连接上的架构更改可能会导致转储失败或返回不正确的数据。如果您希望您的转储成功+正确,那么您需要以某种方式确保在此类转储期间没有人尝试更改架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
相关资源
最近更新 更多