Spec-Zone .ru
спецификации, руководства, описания, API
|
Репликация MySQL работает на InnoDB
таблицы, как это делает для MyISAM
таблицы. Также возможно использовать репликацию в пути, где механизм хранения
на ведомом устройстве не является тем же самым как исходным механизмом хранения на ведущем устройстве. Например,
можно тиражировать модификации в InnoDB
таблица на ведущем устройстве к a MyISAM
таблица на ведомом устройстве.
Чтобы установить новое ведомое устройство для ведущего устройства, сделайте копию InnoDB
табличная область и файлы журнала, так же как .frm
файлы InnoDB
таблицы, и перемещение копии к
ведомому устройству. Если innodb_file_per_table
опция включается, копия .ibd
файлы также. Для надлежащей процедуры, чтобы сделать это, см. Раздел 14.2.2.4, "Поддерживая и
Восстановление InnoDB
База данных".
Чтобы сделать новое ведомое устройство, не приводя в нерабочее состояние ведущее устройство или существующее
ведомое устройство, используйте Резервный продукт MySQL
Enterprise. Если можно завершить работу ведущего устройства или существующего ведомого устройства,
возьмите холодное резервное
копирование InnoDB
табличные области и файлы журнала и использование, что,
чтобы установить ведомое устройство.
Транзакции, которые перестали работать на ведущем устройстве, не влияют на репликацию вообще. Репликация MySQL
основана на двоичном журнале, где MySQL пишет SQL-операторы, которые изменяют данные. Транзакция, которая
перестала работать (например, из-за нарушения внешнего ключа, или потому что она откатывается) не пишется
двоичному журналу, таким образом, она не отправляется ведомым устройствам. См. Раздел
13.3.1,"START TRANSACTION
, COMMIT
, и ROLLBACK
Синтаксис".
Репликация и CASCADE
. Расположение каскадом действий для InnoDB
таблицы на ведущем устройстве тиражируются в ведомое устройство, только если таблицы, совместно использующие отношение внешнего ключа,
используют InnoDB
и на ведущем устройстве и на ведомом устройстве. Это - истина,
используете ли Вы основанную на операторе или построчную репликацию. Предположите, что Вы запустили репликацию,
и затем составляете две таблицы на ведущем устройстве, использующем следующий CREATE TABLE
операторы:
CREATE TABLE fc1 ( i INT PRIMARY KEY, j INT) ENGINE = InnoDB;CREATE TABLE fc2 ( m INT PRIMARY KEY, n INT, FOREIGN KEY ni (n) REFERENCES fc1 (i) ON DELETE CASCADE) ENGINE = InnoDB;
Предположите, что ведомое устройство не имеет InnoDB
поддержка включается. Если это
верно, тогда таблицы на ведомом устройстве составляются, но они используют MyISAM
механизм хранения, и FOREIGN KEY
опция игнорируется. Теперь мы вставляем некоторые
строки в таблицы на ведущем устройстве:
master>INSERT INTO fc1 VALUES (1, 1), (2, 2);
Query OK, 2 rows affected (0.09 sec)Records: 2 Duplicates: 0 Warnings: 0master>INSERT INTO fc2 VALUES (1, 1), (2, 2), (3, 1);
Query OK, 3 rows affected (0.19 sec)Records: 3 Duplicates: 0 Warnings: 0
В этой точке, и на ведущем устройстве и на ведомом устройстве, таблице fc1
содержит
2 строки, и таблицу fc2
содержит 3 строки, как показано здесь:
master>SELECT * FROM fc1;
+---+------+| i | j |+---+------+| 1 | 1 || 2 | 2 |+---+------+2 rows in set (0.00 sec)master>SELECT * FROM fc2;
+---+------+| m | n |+---+------+| 1 | 1 || 2 | 2 || 3 | 1 |+---+------+3 rows in set (0.00 sec)slave>SELECT * FROM fc1;
+---+------+| i | j |+---+------+| 1 | 1 || 2 | 2 |+---+------+2 rows in set (0.00 sec)slave>SELECT * FROM fc2;
+---+------+| m | n |+---+------+| 1 | 1 || 2 | 2 || 3 | 1 |+---+------+3 rows in set (0.00 sec)
Теперь предположите, что Вы выполняете следующий DELETE
оператор на ведущем устройстве:
master> DELETE FROM fc1 WHERE i=1;
Query OK, 1 row affected (0.09 sec)
Из-за каскада, таблицы fc2
на ведущем устройстве теперь содержит только 1 строку:
master> SELECT * FROM fc2;
+---+---+| m | n |+---+---+| 2 | 2 |+---+---+1 row in set (0.00 sec)
Однако, каскад не распространяет на ведомом устройстве потому что на ведомом устройстве DELETE
для fc1
не удаляет строк из fc2
. Копия ведомого устройства fc2
все еще содержит все
строки, которые были первоначально вставлены:
slave> SELECT * FROM fc2;
+---+---+| m | n |+---+---+| 1 | 1 || 3 | 1 || 2 | 2 |+---+---+3 rows in set (0.00 sec)
Это различие - то, вследствие того, что расположение каскадом удаляет, обрабатываются внутренне InnoDB
механизм хранения, что означает, что ни одно из изменений не регистрируется.