Подтвердить что ты не робот

Лучший способ архивирования живой базы данных MySQL

У нас есть живая база данных MySQL, которая составляет 99% INSERT, около 100 в секунду. Мы хотим архивировать данные каждый день, чтобы мы могли запускать запросы на него, не затрагивая основную, живую базу данных. Кроме того, как только архив будет завершен, мы хотим очистить текущую базу данных.

Каков наилучший способ сделать это без (если возможно) блокировки INSERT? Мы используем INSERT DELAYED для запросов.

4b9b3361

Ответ 1

http://www.maatkit.org/ имеет mk-archiver

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

Другой альтернативой является просто создать новую таблицу базы данных каждый день. У MyIsam есть некоторые преимущества для этого, так как INSERT в конце таблицы вообще не блокируются, и есть тип таблицы слияния, чтобы объединить их все вместе. Несколько сайтов регистрируют трафик httpd в таких таблицах.

В Mysql 5.1 есть также таблицы разделов, которые могут сделать то же самое.

Ответ 2

Звучит как репликация - лучшее решение для этого. После первоначальной синхронизации ведомый получает обновления через Binary Log, тем самым не влияя на основную БД.

Подробнее о репликации.

Ответ 3

Я использую таблицы разделов mysql, и я достигаю замечательных результатов во всех аспектах.

Ответ 4

Репликация MySQL будет отлично работать для этого.
Мастер → живой сервер.
Slave → другой сервер в той же сети.

Ответ 6

Не могли бы вы хранить две зеркальные базы данных? Напишите одному, сохраните второй как архив. Переключайте каждые, скажем, 24 часа (или как бы долго вы считаете нужным). В базу данных, которая была архивом, вставьте всю текущую активность. Тогда две базы данных должны совпадать. Используйте это как новый live db. Возьмите архивированную базу данных и сделайте все, что хотите. Теперь вы можете выполнять резервное копирование/извлечение/чтение всего, что вам нужно, чтобы он не был активно написан.

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