通过互联网获取 mysql 数据库备份快照的最有效方法是什么?

通过互联网获取 mysql 数据库备份快照的最有效方法是什么?

好的,情况是这样的:

我们目前使用 mysqldump,然后使用 bzip2 压缩结果并将其 scp 回我们的备份服务器。这是一个耗时的手动过程,并且不会创建快照。

我目前正在尝试使用 rsync 传输新旧转储文件之间的差异,但压缩效率较低。

欢迎提出任何其他建议。

答案1

一种方法是设置数据库复制到备份服务器并在那里创建备份。

如果这在您的环境中不可行,那么您的第二佳选择是使用 rsync 同步纯 SQL 转储(不要忘记--compress)或使用 压缩的 gzip 转储--rsyncable。我不知道 rsync 在这方面表现如何,因为转储文件中插入/删除的值将导致文件发生“偏移”,rsync 需要检测这种偏移以防止重新传输未更改的数据。

当您运行 rsync 时,--stats它应该报告它实际通过网络发送了多少字节,并为您提供一些数字。

答案2

您尝试过以下选项吗?...

rsync -a --compress --compress-level=9

事实上,这应该比使用压缩远程外壳或压缩传输(参见)表现更好(压缩比更高)。rsync(1))。

答案3

我一直使用的解决方案:

  1. 复制到另一台服务器,最好是在同一个物理位置(这样如果需要,您可以进行手动故障转移)。
  2. 设置一个 shell 脚本来在该服务器上进行备份,使用 --master-data --single-transaction(假设您使用 InnoDB),以便您可以获取主日志的位置以及确保您的 DB 转储中的事务一致性。我写了这个,这可能适合您的目的,也可能不适合。
  3. 将备份上传到您想要的任何地方。我使用以下方式将我的备份上传到 Mosso Cloud Files(如果您在 Mosso 服务器上,速度非常快)我编写的另一个脚本。
  4. 根据您数据的重要性,在特定时间段内运行此备份。我们每两小时运行一次。
  5. 去度假。

答案4

您可以将每个表中的数据转储到 CSV 文件中,按主键(或其他键)排序。然后使用split它根据行进行拆分。然后使用 rsync 复制这些文件。因此,如果前 1,000 行(即行)没有更改,则该文件将不会被 rsync。您可以在服务器和客户端上保持未加密状态,然后让 rsync 在网络上进行压缩。这样它就会很快知道“哦,我在这里添加了 10 行”,等等。

相关内容