Прямо сейчас я могу сделать резервную копию, используя mysqldump. Но мне нужно отключить веб-сервер, и резервное копирование занимает около 5 минут. Если я не отключаю веб-сервер, он работает вечно и никогда не завершается + веб-сайт становится недоступным во время резервного копирования.
Есть ли более быстрый / лучший способ сделать резервную копию моей 22 ГБ и растущей базы данных?
Все таблицы MyISAM.
Ответы:
Да.
Настройте репликацию на второй компьютер. Когда вам нужно сделать резервную копию, вы можете заблокировать дополнительный компьютер, выполнить mysqlhotcopy или mysqldump, а затем разблокировать его. Он догонит вашего мастера, и вам никогда не придется переводить мастера в автономный режим.
Вы можете даже сделать это на той же машине, если вы не против удвоить ввод-вывод при записи, но в идеале вы должны выполнять резервное копирование в реальном времени на второй физический сервер и делать резервные копии снимков так часто, как вам нужно. не мешая вашему производственному серверу.
Также теоретически возможно восстановить базу данных, используя известное состояние и binlogs. Я никогда не делал этого, поэтому, пожалуйста, сначала исследуйте, но вы можете сделать резервную копию известного состояния вашей базы данных, а затем просто сделать резервную копию всех новых binlogs и воспроизвести их, если вам когда-нибудь понадобится восстановление. Поскольку binlogs пишутся линейно, пересылка новых binlogs на удаленный компьютер будет очень быстрой.
Изменить: Действительно, похоже, что использование binlogs для резервного копирования задокументировано.
Этот вопрос тесно связан
источник
Простите за то, что я предполагаю, что ОС - это Linux. Если вы не используете LVM, вы должны быть. Если да, вот очень простой способ сделать резервные копии с помощью моментального снимка.
Это позволит вам создавать ночные резервные копии без необходимости добавления подчиненного сервера. Я очень поддерживаю наличие подчиненного сервера для высокой доступности, но я не хочу, чтобы вы думали, что застряли, пока не сможете создать этого ведомого.
источник
FLUSH TABLES WITH READ LOCK - это не то, что вы хотите делать на регулярной (или даже полурегулярной) основе в производственной системе. Это должно быть только последнее средство.
Настройте как минимум двух подчиненных устройств репликации (это, конечно, потребует FLUSH TABLES WITH READ LOCK). После того, как они настроены, вы можете снять резервную копию с одного, пока другой синхронизируется как резервный мастер.
Кроме того, если один из ваших подчиненных выходит из строя, вы можете использовать снимок с него для восстановления второго (или третьего) подчиненного устройства. Если все ваши рабы терпят неудачу, вы возвращаетесь в FLUSH TABLES WITH READ LOCK.
Не забывайте всегда иметь процесс, который регулярно проверяет синхронизацию данных - для этого используйте что-то вроде mk-table-checkum (это нетривиально настроить, обратитесь к документации Maatkit за подробностями).
Поскольку 22 ГБ относительно невелики, у вас не возникнет проблем с этим. Выполнение этого с большой базой данных может быть более проблематичным.
источник
Решение здесь двоякое, как описано выше:
Обратите внимание, что если вы используете InnoDB для своих таблиц, вы можете использовать флаг --single -action, чтобы избежать необходимости делать какие-либо блокировки таблиц и при этом получать согласованный дамп базы данных, даже на главном сервере, и, следовательно, выполнять резервное копирование без снятия сервера. Вышеупомянутое решение, однако, является лучшим.
Кроме того, если вы используете LVM в Linux, вы можете сделать снимок LVM раздела, а затем создать резервную копию. Снимки LVM являются атомарными, поэтому, если вы выполните «очистку таблиц с помощью блокировки чтения», а затем сделаете снимок и разблокируете его, вы получите согласованный снимок.
Если вас беспокоит конфликт ввода-вывода, из-за которого дамп занимает слишком много времени, вы можете добавить третью машину и запустить на ней mysqldump по сети, чтобы избежать перегрузки дисков.
источник
В зависимости от вашей среды, снимки обычно являются отличным способом. Особенно, если вам нужно сделать резервную копию мастера по какой-то причине. Мы запускаем пары master и slave и используем резервные копии снимков на обоих.
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
С таблицами InnoDB вы захотите запустить их
SET AUTOCOMMIT=0;
перед тем, как выполнить блокировку чтения.источник
Взгляните на « Рекомендации по резервному копированию рабочей базы данных MySQL? ». Это аналогичный пост по переполнению стека.
источник
Вы могли бы сделать постепенное резервное копирование. Резервное копирование 1/24 записи каждый час. Единственная проблема с этим подходом заключается в том, что если он потерпит крах в течение первых нескольких часов дня, вы потеряете что-либо с этого времени до момента сбоя. В любом случае, потеря записей занимает менее 24 часов (я не знаю, насколько это важно для вас).
источник