Лучший способ архивировать живую базу данных MySQL - PullRequest
25 голосов
/ 15 сентября 2008

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

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

Ответы [ 6 ]

14 голосов
/ 15 сентября 2008

http://www.maatkit.org/ имеет мк-архиватор

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

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

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

2 голосов
/ 19 мая 2009

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

2 голосов
/ 16 сентября 2008

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

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

1 голос
/ 09 июля 2009

MK-ARCHIVER - это элегантный инструмент для архивирования данных MYSQL.

http://www.maatkit.org/doc/mk-archiver.html

1 голос
/ 16 сентября 2008

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

0 голосов
/ 15 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...