Подтвердить что ты не робот

Можно ли обрабатывать резервные копии MySQL с помощью git?

Сегодня у меня была эта очень аккуратная идея для резервного копирования моей базы данных: поместить файл дампа в репозиторий git, а затем зафиксировать на каждом дампе, чтобы у меня была самая последняя копия, но можно легко откат к предыдущему резервное копирование. Я также могу легко вытащить копию репозитория на регулярной основе, чтобы сохранить копию на моем собственном компьютере в качестве резервной копии резервных копий. Это определенно звучит умно.

Однако я знаю, что у умных решений иногда есть фундаментальные недостатки. Какие проблемы я могу использовать для хранения mysqldump diffs в git? Стоит ли оно того? Что делают большинство людей, чтобы иметь несколько резервных копий базы данных на сервере и сохранять избыточные копии в другом месте?

4b9b3361

Ответ 1

Обычно вы не сохраняете каждую резервную копию (или моментальный снимок) навсегда. Хранилище git хранит каждую проверку, которую вы когда-либо делали. Если вы когда-нибудь решите сократить старые версии (скажем, месячные версии до одного раза в неделю, год от одного до одного раза в месяц и т.д.), Вам придется сделать это с помощью git filter-branch, который перепишет всю историю. Затем git gc, чтобы удалить нежелательные изменения.

Учитывая, что сильные стороны git - это распределенное управление версиями и сложные рабочие процессы патчей/веток (ни одно из них не применяется к моментальным снимкам или резервным копиям), я бы подумал об использовании другого VCS с более гибкой историей.

Ответ 2

Этот подход звучит отлично для меня. Я использую Git для резервного копирования моих важных данных.

Обратите внимание, что вы не сохраняете diffs - Git эффективно сохраняет моментальные снимки состояния каталога с каждой фиксацией. Вы можете создать diff двух коммитов, но фактический механизм хранения не имеет ничего общего с diff.

Ответ 3

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

Git не имеет ограничений жесткого размера файла, но будет отличаться от содержимого вашего последнего дампа с ранее сохраненным в репозитории, для чего потребуется как минимум столько же памяти, сколько размеры обоих этих файлы добавлены вместе, поэтому я бы предположил, что он начнет очень медленно, очень быстро с файлами более 100 МБ (или даже 10 МБ).

Git не был создан для работы с файлами этого типа (т.е. большими файлами данных вместо исходного кода), поэтому я считаю, что это принципиально плохая идея. Тем не менее, вы можете использовать что-то вроде Dropbox для хранения дампов, которые по-прежнему сохраняют историю версий для вас, но более приспособлены к файлам, которые невозможно эффективно разделить.

Ответ 4

Если вы используете MySQL (и, возможно, другие) и активируете двоичное ведение журнала, вам может потребоваться настроить репозиторий git для каталога вашего журнала bin и разработать стратегию для регулярной фиксации обновлений binlog.

В MySQL бинлог хранит запросы, которые изменяют данные в любые таблицы в базе данных. Если вы синхронизируете свои коммиты с регулярными дампами базы данных, вы должны иметь верный способ восстановления данных.

Честно говоря, я думаю, что просто использование собственных инструментов MySQL, вероятно, будет лучшим решением, но то, что я здесь изложил, позволяет вам управлять вашими данными MySQL, что, по-моему, было в первую очередь.