Назад | Перейти на главную страницу

Как я могу сделать резервную копию многогигабайтных баз данных в MySQL? Бонусные баллы за более быстрое восстановление

У меня есть база данных 4 ГБ в MySQL. Как мне сделать резервную копию? Кроме того, есть ли способ ускорить процесс восстановления в случае, если мне потребуется восстановление?

В настоящее время я каждую ночь использую задание cron, которое вызывает mysqldump сбросить все, и я храню 3 дня бэкапов.

У нас есть около 90 ГБ в MySQL, поэтому вот несколько предложений:

  • Вы можете попробовать следующий звонок: mysqldump -u USER -pPASS --single-transaction -Q --databases foo bar (Используйте документацию, чтобы проверить, работают ли эти переключатели для вас.)
  • Если вы используете только таблицы MYISAM, то альтернативой может быть копирование базы данных на другой диск и его хранение в архиве. Однако это не будет работать с INNODB, поскольку он хранит дополнительный файл. Кроме того, вы должны тщательно это проверить.
  • Включите двоичные журналы и сделайте их резервную копию. (Это наверное мой любимый!)
  • Настройте репликацию и сделайте резервную копию на одном из ваших ведомых устройств, а затем позвольте ему догнать остальных. Это довольно приятно, когда он запускается, но проблема в том, чтобы запустить его. Репликация с MySQL не приносит удовольствия. :(
  • Поддерживает ли ваша файловая система моментальные снимки? Если да, то это отличная возможность их использовать.
  • Используйте коммерческое решение, например Аманда.

Лучше всего не прерывать нормальную работу. Для высоконадежных и отказоустойчивых систем у вас есть две синхронизированные базы данных, а вы создаете резервную копию вторичной. (например эта статья Howtoforge)

В противном случае прочтите руководство: используйте myseldump, как сейчас, или используйте скрипт mysqlhotcopy (используйте точно так же, как mysqldump), или остановите БД и просто скопируйте файлы frm, MID, MYI (используя rsync).

Я думаю, что механизм остановки + копирования файлов - это самый быстрый из возможных вариантов.

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

Чтобы ответить на ваш вопрос - extended_insert вариант подходит мне. Если у вас достаточно ресурсов для восстановления, extended_insert вставит огромные фрагменты данных в один запрос, что ускорит восстановление.

Вам действительно стоит подумать о Percona Xtrabackup

Сценарий оболочки "innobackupex" может обрабатывать MyISAM, но для неблокирующего / оперативного резервного копирования все ваши таблицы должны быть InnoDB.

Ура