Задать вопрос
@mrAvenger

Экспорт большого объема данных mysql без локов?

Вопрос много где обсуждался, куча ответов на стеке, но все же, может кто то имеет интересную идею, как это можно реализовать.

Если приложение написанное на C++ которое использует эту базу, и если мы локнем таблицы наше приложение упадет, ну тоесть понятно что не сразу, через какое то время.

бекапятся две базы, одна весом в 10-15гб, другая весом в 3гб, просто как вы понимаете не такой быстрый.

Есть ли какие то способы помимо реплиакации для дампа баз данных без блока таблиц?
  • Вопрос задан
  • 331 просмотр
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
бэкап со слейва
Ответ написан
Для движка InnoDB используйте опцию --single-transaction , которая добавляет SQL-выражение BEGIN перед дампом всех данных из БД, что позволяет получить дамп одной транзакцией, без блокировки таблиц.

Для движка MyISAM используйте опцию --lock-tables , которая блокирует таблицы с помощью READ LOCAL, что позволяет выполнять запросы INSERT в MyISAM-таблицы во время выполнения дампа.

P.S. Кроме того, при дампе больших таблиц с помощью mysqldump рекомендуется использовать опцию --quick

P.P.S Но не стоит забывать, что если вы делаете дамп с флагами --master-data и --single-transaction , автоматические локи не работают (флаг --lock-tables не действует)! Нужно указывать флаг --lock-all-tables

И напоследок: для больших БД использование mysqldump - это зло, почитайте про Percona XtraBackup например тут и тут и свеженькое тут и используйте его если уж сильно не хочется репликацию, хотя бэкапы и при наличии репликации никто не отменял ибо репликация != бэкап.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы