таблицы rsync и MyISAM - PullRequest
       48

таблицы rsync и MyISAM

0 голосов
/ 31 июля 2009

Я пытаюсь использовать rsync для резервного копирования данных MySQL. В таблицах используется механизм хранения MyISAM.

Я ожидал, что после первой rsync последующие rsync будут очень быстрыми. Оказывается, если данные таблицы вообще были изменены, операция замедляется.

Я провел эксперимент с файлом MYD размером 989 МБ, содержащим реальные данные:

Тест 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 вечно просто копирует крошечные изменения?

Редактировать: На самом деле вторая rsync в Тесте 2 занимает столько же времени, сколько и первая. Rsync, очевидно, снова копирует весь файл.

Edit: получается при копировании с локального на локальное, --whole-file подразумевается. Даже с параметром --no-whole-file производительность по-прежнему ужасна.

Ответы [ 4 ]

1 голос
/ 31 июля 2009

rsync все еще должен вычислять хэши блоков, чтобы определить, что изменилось. Может случиться так, что случай отсутствия изменений - это ярлык для просмотра времени / размера мода файла.

0 голосов
/ 07 октября 2009

при локальном копировании rsync по умолчанию имеет значение --whole-file по причине: это быстрее, чем делать проверки.

  • Если вам нужна самая быстрая локальная копия, вы ее уже получили.
  • Если вы хотите увидеть ускорение rsync, скопируйте по сети. Это впечатляет, но не будет быстрее, чем локальная полная копия.

rsync для локальных копий - хорошая замена cp, когда у вас большой каталог, в котором изменяются только некоторые файлы. Это скопирует эти файлы целиком; но быстро пропустите те, которые не были изменены (просто проверьте метки времени и размер файла). Для одного большого файла это не лучше, чем cp.

0 голосов
/ 07 октября 2009

Rsync основывается на файлах. Если вы нашли способ сделать это с системой, основанной на блоках, вы можете просто сделать резервную копию блоков / байтов, которые изменились.

Снимки LVM могут быть одним из способов сделать это.

0 голосов
/ 31 июля 2009

rsync использует алгоритм, в котором он видит, изменился ли файл, а затем видит, какие его части изменились. В большой базе данных ваши изменения распространяются по большому сегменту файла. Это худший вариант rsync.

...