我正在尝试使用 rsync 来备份 MySQL 数据。这些表使用 MyISAM 存储引擎。
我的期望是在第一次 rsync 之后,后续的 rsync 会非常快。事实证明,如果表数据发生了变化,操作速度就会变慢。
我用一个包含真实数据的 989 MB MYD 文件做了一个实验:
测试 1 - 重新复制未修改的数据
rsync -a orig.MYD copy.MYD
- 正如预期的那样需要一段时间
rsync -a orig.MYD copy.MYD
- 瞬时 - 加速数以百万计
测试 2 - 重新复制稍作修改的数据
rsync -a orig.MYD copy.MYD
- 正如预期的那样需要一段时间
UPDATE table SET counter = counter + 1 WHERE id = 12345
rsync -a orig.MYD copy.MYD
- 与原件一样长!
是什么赋予了?为什么 rsync 只是为了复制一个微小的变化而需要永远?
编辑:事实上,测试 2 中的第二个 rsync 与第一个一样长。rsync 显然是再次复制整个文件。
编辑:从本地复制到本地时结果是 --whole-file 是隐含的。即使使用 --no-whole-file,性能仍然很糟糕。