Резервное копирование двух баз данных

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

mysqldump db1 db2 > db1_db2.sql 

Соответствует ли приведенный выше код. Будет ли он блокировать обе базы данных на time резервного копирования, поэтому я получаю синхронизированную резервную копию? Каков правильный способ достичь этого? Как бы это сделать, но с разделенным fileом для каждой базы данных?

РЕДАКТИРОВАТЬ:

В большинстве таблиц используется движок InnoDB, но есть несколько менее важных таблиц, в которых используется механизм архивации.

Ваш лучший вариант:

 mysqldump --single-transaction --databases db1 db2 > db1_db2.sql 

Параметр –single-transaction создает window «точка-во-time» для всех данных в дампе. Единственным ограничением является то, что вы не выполняете DDL

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
  • См. Мою блокировку столбцов DBA StackExchange row locking within ACID transaction innodb чтобы уviewеть все инструкции, которые могут прерывать транзакции.

Пока вы не выполняете какие-либо из них в течение времени mysqldump, db1 и db2 будут идеальным моментальным снимком с момента запуска mysqldump.

Ваши таблицы, отличные от InnoDB, должны быть прекрасными, если вы ничего не делаете для них: less DDL, less INSERT, less UPDATE, less DELETE.

ОБНОВЛЕНИЕ 2014-06-26 19:43 EDT

Ты спрашивал

Являются ли взаимные эксклюзивные транзакции и блокировки всех таблиц? Является ли один из них подразумеваемым \ default?

Прямо из документации MySQL по -single-transaction

Параметр -single-transaction и опция -lock-tables являются взаимоисkeyающими, поскольку LOCK TABLES заставляет любые незавершенные транзакции совершать неявно.

Да, они взаимоисkeyающие.

Прямо из документации MySQL на -lock-all-tables

Блокируйте все таблицы во всех базах данных. Это достигается путем приобретения глобальной блокировки чтения в течение всего дампа. Эта опция автоматически отkeyает –single-transaction и -lock-tables.

Таким образом, lock-all-tables отkeyит – --single-transaction

CAVEAT: Имейте в viewу, что FLUSH TABLES WITH READ LOCK; и все другие жесткие (все или ничего) механизмы блокировки не будут полностью останавливать InnoDB от записи в системное табличное пространство. Ранее я писал об этом в DBA StackExchange .

Вот map InnoDB, чтобы вы могли визуализировать другие движущиеся части InnoDB:

Архитектура InnoDB

Пожалуйста, прочитайте, как FLOWH TABLES WITH READ LOCK работает с tableми Innodb (MySQL Performance Blog) о других неблагоприятных последствиях блокировки всех таблиц против InnoDB.

Посмотрите на этот URL-адрес для обзора резервных копий MySQL.

http://www.iheavy.com/2012/08/09/5-things-you-overlooked-with-mysql-dumps/

Вам нужно добавить следующий аргумент для блокировки обоих db.

-lock-all-tables, -x

«Заблокируйте все таблицы во всех базах данных, это достигается путем получения глобальной блокировки чтения в течение всего дампа».

Ваша command должна быть такой, как показано ниже.

mysqldump -x –databases db1 db2

Вы также можете рассмотреть возможность репликации баз данных MySQL на подчиненный server и резервное копирование из подчиненного устройства.

  • Добавление параметров mysqldump в automysql
  • Как установить mysql gem под OS X
  • Быстрый request большого массива данных: MySQL MEMORY (HEAP), MyISAM или что-то еще (например, MemCached)
  • Ubuntu 10.04 repository по умолчанию для установки MySQL5.5?
  • Как искать таблицу MySQL для дубликатов
  • MySQL-кластер или Multi-Master для производства? Проблемы с performanceю?
  • Необычно высокая memory RDS MySQL
  • MySQL SELECT зависает
  • MySQL Использование использования processора (срочно)
  • Производительность репликации MySQL
  • Centos MySQL optimization 4gb ram
  • Давайте будем гением компьютера.