Hit*_*kun 5 mysql myisam backup linux
免责声明:我很清楚这是不应该做的,但桌子之间的时间一致性在这里不是一场音乐会,我现在正在尝试任何我脑海中突然出现的东西,以提供准时、按需备份的替代方案,以补充更多健壮的,预定的。
我几乎想知道在复制 MyISAM 表文件(.frm、.MYD、MYI)并获取事务时是否会出现任何读取问题。
大多数桌子都很小,所以我们可以冒险,但有几张桌子因为它们的大小而让我担心。我不介意等待交易完成,让我担心的是读取错误并且无法从查询中获得响应
就是这样,如果你知道什么请告诉我
+1 到@RolandoMySQLDBA 当然是另一个勇敢的答案。但更重要的是你的问题:
...当我复制 MyISAM 表文件(.frm、.MYD、MYI)并获得 [写入] 事务时,会[有] 任何读取问题。
即使对于单个 MyISAM 表,您也无法获得一致的备份,除非您进行某种类型的锁定以防止写入。Rolando 给出了一个非常详尽的答案,其中包含可供您锁定的选项。
人们用于备份 MyISAM 数据的另一种选择:LVM 快照。请参阅http://www.lenzg.net/mylvmbackup/以获得一个很好的工具来帮助解决这个问题。
最后的建议是停止使用 MyISAM,而使用 InnoDB。然后您可以使用Percona XtraBackup进行快速、非锁定的物理备份。
回复您的评论:
因为读取大文件不是即时的或原子的。当您的备份在整个表中进行时,其他并发更新可能会更改您的备份已读取的行和您的备份尚未到达的行。
举一个交易行为的教科书例子:我通过借记我的银行账户和贷记你的银行账户来进行银行转账。我的银行帐户存储在文件中物理上较早的一行中,而您的银行帐户存储在文件中较晚的一行中。
在此过程中,备份正在读取文件,并且在我们的事务发生时已读取到中间点。当我们恢复时,我们得到了我的原始帐户余额,没有应用借记,因为在借记发生时备份已经过了那个点(并且它不能倒退)。但是恢复包括您更新后的帐户余额,因为在我们增加您的余额后,备份到达了文件中的那个点。
因此,免费的钱!;-)
MyISAM 通过要求表在读取时锁定更新来解决这个问题。
InnoDB 通过保留多个版本的行来解决这个问题,只要读取事务需要查看它们以保持数据库的一致视图。因此,即使备份正在进行中,任何人都可以更新数据而无需等待。
Percona XtraBackup 以稍微不同的方式解决了这个问题:在某种程度上,它可以倒退。在读取数据文件时,它会不断检查事务日志,以查看是否需要包含任何后期更改。这些更改可能适用于 Percona XtraBackup 已经读取的部分数据文件。但是只要它获取数据文件以及自备份开始以来记录的任何更改,它就可以重建完整的数据库。
但这仅适用于创建可靠事务日志的 InnoDB 等存储引擎。Percona XtraBackup 也可以备份 MyISAM,但只能像任何其他备份工具一样使用锁定。
| 归档时间: |
|
| 查看次数: |
3205 次 |
| 最近记录: |