mysqldump или mysqlhotcopy для резервного копирования большой базы данных MySQL? - PullRequest
2 голосов
/ 03 июня 2009

У меня есть хранилище NAS для резервного копирования с моим выделенным хостинг-провайдером. Я устанавливаю автоматическое ежедневное резервное копирование с помощью WHM для резервного копирования баз данных и учетных записей. Сервер обслуживает один сайт. Когда он выполняет резервное копирование, он создает дамп mysql и, по сути, отключает сайт на все время резервного копирования, потому что никто не может подключиться к базе данных, пока происходит дамп. Сайт обычно не работает примерно от 30 секунд до минуты (это может показаться небольшим, но для такого рода сайтов это реальная проблема).

Есть ли лучший способ сделать резервную копию, чтобы этого не произошло (будет ли лучше mysqlhotcopy или Maatkit?), Будь то другой способ резервного копирования на NAS или просто вообще не использовать NAS и использовать какой-то другой метод.

Ответы [ 4 ]

8 голосов
/ 03 июня 2009

mysqlhotcopy быстрее, чем mysqldump, но не делает InnoDB.

Для создания резервных копий я использую репликацию и создаю дамп на ведомом устройстве. Во время резервного копирования вы получаете 0 времени простоя и скачок нагрузки не происходит.

2 голосов
/ 15 ноября 2010

Для InnoDB оптимальное решение без репликации выглядит так:

mysqldump mydbname --result-file=mydbname.sql --verbose --single-transaction

Это использует функцию моментального снимка транзакции InnoDB и позволяет нормальные (запись!) Операции с базами данных без прерываний вообще. С --master-data=1 вы даже сможете автоматически записывать двоичную позицию журнала снимка. Тем не менее, положение двоичного журнала кажется бесполезным, если делать это отдельно для нескольких баз данных на одном сервере.

Недостатком является то, что это не работает должным образом, когда у вас есть некоторые таблицы MyISAM. Я сам использую полнотекстовое индексирование MySQL, которое требует неразделенных таблиц MyISAM. Однако можно расположить вещи таким образом, чтобы таблицы MyISAM были только вторичными наборами данных, в которые сбрасываются тексты, уже существующие в таблицах InnoDB, так что таблицы MyISAM могут быть перестроены с нуля при необходимости. У меня есть скрипт, который проверяет типы таблиц баз данных и использует --single-transaction вместо --lock-tables всякий раз, когда внутри одной БД есть только таблицы InnoDB.

Другим решением будет использование некоторой функции моментального снимка диска или файловой системы, например LVM. Но это было бы весьма существенным ударом по производительности при записи, когда существуют моментальные снимки из-за чрезвычайно тупого механизма резервного копирования при записи LVM (который ошибочно называют COW, что не является здравым смыслом). Поэтому довольно хорошим решением, похоже, является MySQL на Solaris ZFS или на FreeBSD UFS. Оба поддерживают эффективные снимки и являются относительно стабильными из-за их возраста. Btrfs также имеет эффективные снимки, но все еще БЕТА.

0 голосов
/ 16 ноября 2010

хорошо, есть еще одна довольно эффективная технология моментальных снимков: mdraid1 - Linux softraid level 1. Если вы запускаете MySQL на mdraid1, просто подключите другой диск, дайте ему синхронизироваться, остановите mysql, выполните синхронизацию, удалите третий и синхронизированный компонент рейда, перезапустите mysql. Если вы используете растровые изображения с вашим raid1, повторная синхронизация для создания другого снимка обычно выполняется довольно быстро ...

0 голосов
/ 05 июня 2009

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

...