rsync 和 MyISAM 表

发布于 2024-07-29 05:31:56 字数 886 浏览 7 评论 0原文

我正在尝试使用 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,性能仍然很糟糕。

I'm trying to use rsync to backup MySQL data. The tables use the MyISAM storage engine.

My expectation was that after the first rsync, subsequent rsyncs would be very fast. It turns out, if the table data was changed at all, the operation slows way down.

I did an experiment with a 989 MB MYD file containing real data:

Test 1 - recopying unmodified data

  • rsync -a orig.MYD copy.MYD
    • takes a while as expected
  • rsync -a orig.MYD copy.MYD
    • instantaneous - speedup is in the millions

Test 2 - recopying slightly modified data

  • rsync -a orig.MYD copy.MYD
    • takes a while as expected
  • UPDATE table SET counter = counter + 1 WHERE id = 12345
  • rsync -a orig.MYD copy.MYD
    • takes as long as the original copy!

What gives? Why is rsync taking forever just to copy a tiny change?

Edit: In fact, the second rsync in Test 2 takes as long as the first. rsync is apparently copying the whole file again.

Edit: Turns out when copying from local to local, --whole-file is implied. Even with --no-whole-file, the performance is still terrible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

最好是你 2024-08-05 05:31:56

rsync 仍然需要计算块哈希来确定发生了什么变化。 不修改的情况可能是查看文件修改时间/大小的快捷方式。

rsync still has to calculate block hashes to determine what's changed. It may be that the no-modification case is a shortcut looking at file mod time / size.

世界和平 2024-08-05 05:31:56

rsync 使用一种算法来查看文件是否已更改,然后查看文件的哪些部分发生了更改。 在大型数据库中,您的更改通常会分布在文件的很大一部分中。 这是 rsync 最坏的情况。

rsync uses an algorithim where it sees if a file has changed, and then sees what parts of it changed. In a large database it is common that your changes are spread throughout a large segment of the file. This is rsync's worst case scenario.

揽清风入怀 2024-08-05 05:31:56

Rsync 是基于文件的。 如果您找到了一种使用基于块的系统执行此操作的方法,那么您可以只备份已更改的块/字节。

LVM 快照可能是实现此目的的一种方法。

Rsync is file based. If you found a way of doing it with a block based system then you could just backup the blocks/bytes that had changed.

LVM snapshots might be one way of doing this.

青春有你 2024-08-05 05:31:56

在进行本地复制时,rsync 默认为 --whole-file ,原因是:它比执行检查更快。

  • 如果您想要最快的本地副本,那么您已经得到了。
  • 如果您想查看 rsync 加速情况,请通过网络进行复制。 它令人印象深刻,但不会比本地完整副本更快。

当您有一个只有部分文件发生变化的大目录时,本地副本的 rsync 是 cp 的一个很好的替代品。 它将整个复制这些文件; 但快速跳过那些未修改的(仅检查时间戳和文件大小)。 对于单个大文件来说,它并不比cp更好。

when doing local copies, rsync defaults to --whole-file for a reason: it's faster than doing the checks.

  • If you want the fastest local copy, you already got it.
  • If you want to see the rsync speedup, copy over the network. It's impressive, but won't be faster than a local full copy.

rsync for local copies is a nice replacement to cp when you have a big directory where only some files change. It'll copy those file whole; but quickly skip those not modified (just checking timestamps and filesize). For a single big file, it's no better than cp.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文