Копируйте базу данных MySQL с “непостоянной” записью

BackupPC использует жесткие ссылки в своем устройстве хранения данных, таким образом, Вы не собираетесь быть способными просто совместно использовать папку на машине Windows для монтирования на машине Ubunut для BackupPC для вписывания.

Я рекомендовал бы или использующий rsync (http://rsync.samba.org/) или Унисон (http://freshmeat.net/projects/unison) синхронизировать/var/lib/backuppc/pc/localhost каталог с удаленным каталогом на Вашей машине Windows. Вы собираетесь потерять hardlinks, когда Вы делаете это, но по крайней мере у Вас будут файлы от поля.

2
задан 23 February 2010 в 03:32
2 ответа

Мы используем такую ситуацию наш офис для теста/резервного копирования/производства.

Наша ситуация похожа на это:

  • Производство получает все записи
  • Ведомая копия напоминания добирается, все обновления (для заменяют),
  • Локальная ведомая копия получает все обновления (для ro/backup)
  • Тестовый сервер перезаписывается каждое утро от локального ведомого устройства.

Для упрощения последней части сначала мы блокируем локальное ведомое устройство ("ТАБЛИЦЫ СБРОСА С БЛОКИРОВКОЙ ЧТЕНИЯ";), затем мы просто используем Linux LVM для создания снимка хранилища данных локальной ведомой копии (таким образом, у нас есть последовательный дисковый снимок). Мы затем используем rsync для копирования со снимка локального ведомого устройства сверху dar dir на тестовом сервере. Это имеет побочный эффект хранения новых таблиц, которые не были продвинуты к Производству вокруг так текущих проектов с новой функциональностью, не сдуваются.

Это хорошо работает с таблицами MyISAM, который является тем, что мы используем, мы не переключились на InnoDB. Я боюсь я "m не уверенный, если rsync часть работала бы правильно с InnoDB. Если Ваше использование InnoDB, вероятно, можно сойти с рук mysqldump> dumpfile.sql, и mysql <dumpfile.sql на тестовом сервере.

2
ответ дан 3 December 2019 в 11:14

Вопрос 1:

На Linux можно использовать записываемые снимки LVM для создания замороженных изображений копии, которую можно затем изменить на содержание основы, не влияя истинную копию.

Это могло бы работать что-то вроде этого:

На копии:

stop true-replica mysql instance;
create a writeable snapshot;
start throwaway-replica mysql instance;
restart true-replica and restart replication;

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

Вопрос 2: Я не ясен, что Вы имеете в виду. Обычно, репликация MySQL выполняет непрерывно совершенствование Вашей копии почти ни с каким влиянием на ведущее устройство.

Вопрос 3: MySQL очень легко администрировать. LVM может взять немного привыкающее к и мог бы потребовать дополнительного дискового пространства.

Shlomo - часть Вашей терминологии сбивает с толку. Для баз данных термин "репликация" имеет тенденцию означать механизм для того, чтобы усовершенствовать удаленную копию базы данных. Этому нужно ведущее устройство репликации для отслеживания изменений в данных - который MySQL делает с двоичным журналом, содержащим любые обновления, вставляет, удаляет, были применены. Ведомое устройство репликации должно получить эти зарегистрированные изменения и затем применить их к его собственному набору данных.

Инициализация ведомого устройства может быть хитрой. Вам нужен дамп, содержащий снимок основной базы данных в данный момент вовремя - который большинство механизмов дампа базы данных даст Вам - и точка в журналах репликации, которые обновляют/удаляют/вставляют следующие, будет зарегистрирован - снова, много процессов дампа базы данных могут включать эту точку репликации в дамп. Вы затем восстанавливаете свое ведомое устройство репликации использование дампа и настраиваете его для тиражирования от точки репликации, что дамп был создан.

Создание файла дампа может быть навязчивым: для таблиц MyISAM необходимо или остановить сервер MySQL и скопировать содержание datadir в Вас dumpfile, или заблокировать все таблицы, которые будут включены в дамп и или скопировать необработанные файлы таблицы с datadir или mysqldump необходимые таблицы, держа блокировку в течение какого-то времени. В то время как блокировка сохранена, обновления заблокированных таблиц будут остановлены на время процесса дампа - который может быть навязчивым.

Для Innodb mysqldump может использоваться для генерации дампа без слишком большого влияния на постоянных пользователей базы данных. Внутренне, это генерирует снимок данных, выводимых, позволяя последовательному набору данных быть включенным в дамп даже, в то время как пользователи обновляют те же таблицы. Это окажет влияние производительности и также потребует пространства для поддержания снимка - об эквивалентном размере строк, которые изменяются другими пользователями, в то время как дамп сгенерирован. Очевидно, чем больше изменений, тем больше дисковое пространство используется. После того как дамп завершается, пространство, использованное путем содержания снимка, возвращается.

После того как Ваша копия создается, влияние на ведущее устройство поддержания репликации к ведомому устройству миниатюрно - обычно только несколько процентов. Вся реальная работа сделана ведомым устройством, обновляющим его набор данных, поскольку изменения выжиты журналы репликации. Используя встроенную функцию репликации MySQL, большинство пользователей может поддерживать репликацию в рабочем состоянии весь день, значительно не влияя на их основную базу данных.

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

Административные издержки поддерживают вход в систему репликации ведущее устройство. Должно быть достаточно пространства на диске для содержания ценности по крайней мере нескольких дней журналов, предпочтительно ценность нескольких недель. Чем дольше журналы репликации сохранены, тем дольше Ваши дампы остаются жизнеспособными для использования в инициализации копий. Если журналы репликации, связанные с Вашим дампом, были очищены, то Ваш дамп не может быть ued для создания копии. MySQL может быть настроен для удаления журналов, после того как они передали определенный порог возраста, таким образом, никакое вращение журнала scipts не требуется.

Нормальный шаблон - то, что, после того как Вам создали хорошую копию, Вы используете это для взятия дампов - таким образом, избегающий любого влияния на главный сервер вообще. Копии, от которой Вы берете дампы, нужно включить "ведомые обновления журнала" - так, чтобы она в свою очередь поддержала журнал репликации каждого изменения, внесенного в него непосредственно (который является плохой идеей, потому что затем Ваша копия отклонится от ведущего устройства), и каждое изменение, которое проникло через поток репликации - который по умолчанию она не добавит к журналу репликации.

Я предлагаю, чтобы Вы играли вокруг с некоторыми тестовыми машинами и настроили репликацию и видели то, что происходит. Это очень легко и быстро, чтобы сделать, после того как у Вас есть подвешивание его. Кроме того, посмотрите на опции фильтрации репликации, которые доступны - который может быть полезным, если Вы только хотите копировать подмножество основной базы данных. Они находятся в руководстве MySQL:

16.2.3. Как серверы оценивают правила фильтрации репликации

1
ответ дан 3 December 2019 в 11:14
  • 1
    Для Вопроса 2, I' m говорящий о начальном времени, требуемом создать копию. Например, если начальный процесс репликации занимает больше времени, чем 20 часов, то я can' t запускают начальный процесс репликации в рабочий день (он вмешается в наш ежедневный процесс обновления). Я должен буду сделать это в частях - т.е. запускать его в 8:00 каждый день и останавливать его в 17:00 каждый день. Я понимаю, что, после того как у меня есть копия базы данных, любые возрастающие ежедневные обновления окажут минимальное влияние. –  Shlomo Shmai 24 February 2010 в 03:32
  • 2
    4 ГБ являются довольно маленькими для базы данных. Нам требуются приблизительно 6 часов для восстановления копии от дампа на 500 ГБ, таким образом, я не понимаю, почему 4 ГБ занимают 20 часов. Что поднимает все это время? –  Martin 25 February 2010 в 13:32
  • 3
    Извините за то, чтобы не быть ясным, я wasn' t говорящий, что 4 ГБ заняли бы 20 часов. Я просто выражал свою озабоченность, что, ЕСЛИ БЫ это действительно занимало у этого много времени, затем были бы проблемы. Я говорил с DBA, и он сказал мне, что мой DB составляет приблизительно 15 ГБ, и они сделали восстановление для меня, и потребовалось, возможно, 7 часов. По сравнению с Вашими 500 ГБ за 6 часов, это очень медленно, там что-нибудь, что Вы делаете особенный для ускорения вещей? –  Shlomo Shmai 26 February 2010 в 20:26
  • 4
    Мы используем таблицы MyISAM и что-то подобное mysqlhotcopy: заблокируйте все таблицы, сбросьте данные к диску, копии и сжатию в файлы дампа, разблокируйте таблицы. Наше восстановление быстро, потому что все, что мы делаем, распаковывают и распаковывают tarball в цели server' s datadir. Если Вы используете mysqldump, затем должны обработать миллионы вставок для загрузки данных, я вижу, почему это могло бы быть медленно. Для innodb можно сделать что-то подобное, но необходимо удалить целый сервер для получения стабильного образа диска для копирования - также изображение могло бы включать базы данных, которыми Вы не интересуетесь. –  Martin 28 February 2010 в 16:16

Теги

Похожие вопросы