Spec-Zone .ru
спецификации, руководства, описания, API

13.1.7.2. ALTER TABLE Онлайновые Операции в MySQLCluster

Этот раздел обсуждает онлайновые табличные изменения схемы как реализовано в MySQL Cluster. InnoDB механизм хранения может также выполнить такие операции онлайн, используя различный синтаксис от поддерживаемого MySQL Cluster; для получения дополнительной информации см. Раздел 5.5, "Онлайновый DDL для InnoDB Таблицы".

Операции, которые добавляют и отбрасывание, индексируют на переменных-width столбцах NDB таблицы происходят онлайн. Онлайновые операции некопируют; то есть, они не требуют, чтобы это индексировало быть воссозданным. Они не блокируют таблицу, изменяемую от доступа другими узлами API в MySQL Cluster (но видят Ограничения позже в этом разделе). Такие операции не требуют однопользовательского режима для NDB табличные изменения сделаны в кластере с многократными узлами API; транзакции могут продолжаться непрерывный во время онлайновых операций DDL.

ONLINE ключевое слово может использоваться, чтобы выполнить онлайн ADD COLUMN, ADD INDEX (включая CREATE INDEX операторы), и DROP INDEX операции на NDB таблицы. Онлайн переименование NDB таблицы также поддерживаются.

Отметить

ONLINE и OFFLINE ключевые слова поддерживаются только в MySQL Cluster. В стандартном MySQL Server 5.6 выпусков, пытаясь использовать ONLINE или OFFLINE ключевое слово в ALTER TABLE, CREATE INDEX, или DROP INDEX оператор приводит к ошибке.

В настоящий момент невозможно добавить находящиеся на диске столбцы к NDB таблицы онлайн. Это означает это, если Вы хотите добавить столбец в памяти к NDB таблица, которая использует на уровне таблицы STORAGE DISK опция, следует объявить новый столбец как использование основанного на памяти хранения явно. Например — предполагающий, что Вы уже создали табличную область ts1— предположите, что Вы составляете таблицу t1 следующим образом:

mysql> CREATE TABLE t1 (     >     c1 INT NOT NULL PRIMARY KEY,     >     c2
        VARCHAR(30)     >     )     >     TABLESPACE ts1 STORAGE DISK     >     ENGINE NDB;Query OK, 0 rows affected (1.73 sec)Records: 0  Duplicates: 0  Warnings: 0

Можно добавить новый столбец в памяти к этой таблице онлайн как показано здесь:

mysql> ALTER ONLINE TABLE t1 ADD COLUMN c3 INT
        COLUMN_FORMAT DYNAMIC STORAGE MEMORY;Query OK, 0 rows affected (1.25 sec)Records: 0  Duplicates: 0  Warnings: 0

Этот оператор перестал работать если STORAGE MEMORY опция опускается:

mysql> ALTER ONLINE TABLE t1 ADD COLUMN c3 INT
        COLUMN_FORMAT DYNAMIC;ERROR 1235 (42000): This version of MySQL doesn't yet support'ALTER ONLINE TABLE t1 ADD COLUMN c3 INT COLUMN_FORMAT DYNAMIC'

Если Вы опускаете COLUMN_FORMAT DYNAMIC опция, динамический формат столбца используется автоматически, но предупреждение выпускается, как показано здесь:

mysql> ALTER ONLINE TABLE t1 ADD COLUMN c3 INT
        STORAGE MEMORY;Query OK, 0 rows affected, 1 warning (1.17 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> SHOW WARNINGS;+---------+------+---------------------------------------------------------------+| Level   | Code | Message                                                       |+---------+------+---------------------------------------------------------------+| Warning | 1478 | Converted FIXED field to DYNAMIC to enable on-line ADD COLUMN |+---------+------+---------------------------------------------------------------+1 row in set (0.00 sec)mysql> SHOW CREATE TABLE t1\G*************************** 1. row ***************************       Table: t1Create Table: CREATE TABLE `t1` (  `c1` int(11) NOT NULL,  `c2` varchar(30) DEFAULT NULL,  `c3` int(11) /*!50120 STORAGE MEMORY */ /*!50120 COLUMN_FORMAT DYNAMIC */ DEFAULT NULL,  `t4` int(11) /*!50120 STORAGE MEMORY */ DEFAULT NULL,  PRIMARY KEY (`c1`)) /*!50100 TABLESPACE ts_1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin11 row in set (0.03 sec)
Отметить

STORAGE и COLUMN_FORMAT ключевые слова поддерживаются только в MySQL Cluster; в любой другой версии MySQL, пытаясь использовать любое из этих ключевых слов в a CREATE TABLE или ALTER TABLE оператор приводит к ошибке.

Также возможно использовать оператор ALTER ONLINE TABLE ... REORGANIZE PARTITION без partition_names INTO (partition_definitions) опция на NDB таблицы. Это может использоваться, чтобы перераспределить данные MySQL Cluster среди новых узлов данных, которые были добавлены к кластеру онлайн. Для получения дополнительной информации об этом операторе, см. Раздел 13.1.7.1,"ALTER TABLE Операции раздела" Для получения дополнительной информации о добавлении узлов данных онлайн к MySQL Cluster, см. Раздел 17.5.13, "Узлы данных Кластера MySQL Adding Онлайн".

Ограничения MySQL Cluster онлайновые операции

Онлайн DROP COLUMN операции не поддерживаются.

Онлайн ALTER TABLE, CREATE INDEX, или DROP INDEX операторы, которые добавляют столбцы или добавляют или отбрасывание, индексируют, подвергаются следующим ограничениям:

Столбцы, которые будут добавлены онлайн, не могут использовать BLOB или TEXT введите, и должен соответствовать следующим критериям:

Предыдущие ограничения не применяются к операциям, которые просто переименовывают таблицы или столбцы.

Для онлайн ALTER TABLE операции на NDB таблицы, столбцы фиксированного формата преобразовываются в динамический, когда они добавляются онлайн, или когда индексирует, создаются или отбрасываются онлайн, как показано здесь:

mysql> CREATE TABLE t1 (     >     c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY     >     ) ENGINE=NDB;Query OK, 0 rows affected (1.44 sec)mysql> ALTER ONLINE TABLE t1 ADD COLUMN c2 INT, ADD COLUMN c3 INT;Query OK, 0 rows affected, 2 warnings (0.93 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> SHOW WARNINGS;+---------+------+---------------------------------------------------------------+| Level   | Code | Message                                                       |+---------+------+---------------------------------------------------------------+| Warning | 1475 | Converted FIXED field to DYNAMIC to enable on-line ADD COLUMN || Warning | 1475 | Converted FIXED field to DYNAMIC to enable on-line ADD COLUMN |+---------+------+---------------------------------------------------------------+2 rows in set (0.00 sec)
Отметить

Существующие столбцы, включая первичный ключ таблицы, не должны быть динамичными; только столбец или столбцы, которые будут добавлены онлайн, должны быть динамичными.

mysql> CREATE TABLE t2 (     >     c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY COLUMN_FORMAT FIXED     >     ) ENGINE=NDB;Query OK, 0 rows affected (2.10 sec)mysql> ALTER ONLINE TABLE t2 ADD COLUMN c2 INT;Query OK, 0 rows affected, 1 warning (0.78 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> SHOW WARNINGS;+---------+------+---------------------------------------------------------------+| Level   | Code | Message                                                       |+---------+------+---------------------------------------------------------------+| Warning | 1475 | Converted FIXED field to DYNAMIC to enable on-line ADD COLUMN |+---------+------+---------------------------------------------------------------+1 row in set (0.00 sec)

Столбцы не преобразовываются из FIXED к DYNAMIC формат столбца, переименовывая операции. Для получения дополнительной информации о COLUMN_FORMAT, см. Раздел 13.1.17,"CREATE TABLE Синтаксис".

KEY, CONSTRAINT, и IGNORE ключевые слова поддерживаются в ALTER TABLE операторы используя ONLINE ключевое слово.