Надежные резервные копии для огромных баз данных MySQL? - PullRequest
3 голосов
/ 29 января 2010

У меня есть база данных mysql / innodb на 200 ГБ / 400Mrows - намного больше, чем разумно, как я выяснил.

Одна удивительная проблема - восстановление резервных копий. mysqldump генерирует огромные sql-файлы, и им требуется около недели для импорта обратно в новую базу данных (попытки сделать это быстрее, например, большие / меньшие транзакции, отключение ключей во время импорта и т. д., сжатие сети и т. д. пока не удалось, импорт myisam кажется В 2 раза быстрее, но тогда транзакций не будет).

Что еще хуже - и я надеюсь получить некоторую помощь в этом - сетевое подключение, которое передает> 200 ГБ в течение периода времени недели, имеет нетривиальный шанс разрыва, и процесс импорта sql не может быть продолжен ни в одном из Тривиальный путь.

Как лучше всего с этим справиться? Прямо сейчас, если я замечаю разорванное соединение, я вручную пытаюсь выяснить, когда оно закончилось, проверяя самый высокий первичный ключ последней импортированной таблицы, а затем получаю perlscript, который в основном делает это:

perl -nle 'BEGIN{open F, "prelude.txt"; @a=<F>; print @a; close F;}; print if $x; $x++ if /INSERT.*last-table-name.*highest-primary-key/'

Это действительно не тот путь, так что будет лучше?

Ответы [ 3 ]

1 голос
/ 30 января 2010

Вы не можете использовать mysqldump для резервного копирования больших баз данных - 200G возможно, но с большими становится все хуже и хуже.

Лучше всего сделать снимок тома каталога базы данных и каким-то образом сжать его.- это то, что мы обычно делали - или rsync это где-то еще.

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

Чтобы восстановить ее, просто сделайте обратное, затем перезапустите и подождите (возможно, некоторое время) для восстановления innodb висправить все.

Инструменты maatkit mk -rallel-dump и restore немного лучше, чем mysqldump, по скорости, но я не уверен на 100% в их правильности


Редактировать: перечитывая вопрос, я думаю, что снимок файловой системы + rsync, вероятно, лучший путь;вы можете сделать это, не оказывая слишком большого влияния на работающую систему (вам нужно будет только перенести то, что изменилось со времени последнего резервного копирования), и вы можете возобновить rsync, если соединение не установится, и оно продолжится с того места, где оно было прервано.

1 голос
/ 29 января 2010

Достаточно ли на вашем компьютере MySQL места на жестком диске для удвоения всех данных? Здесь лучше всего использовать локальное хранилище, но если это не вариант, вы также можете попробовать какое-то устройство NAS, использующее iSCSI. Это все еще происходит в сети, но в этом случае вы получаете большую пропускную способность и надежность, потому что вы полагаетесь только на NAS, который имеет довольно тонкую ОС и почти никогда не требует перезагрузки.

0 голосов
/ 29 января 2010

Вам нужно все в базе данных?

Можете ли вы поместить некоторую информацию в базу данных архива и добавить в приложение что-то, что позволит людям просматривать записи в архиве,

Очевидно, что это во многом зависит от вашего приложения и настройки, но может ли это быть решением?Ваша БД, вероятно, только станет больше ....

...