Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел обсуждает онлайновые табличные изменения схемы как реализовано в 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 Онлайн".
Онлайн DROP COLUMN
операции не поддерживаются.
Онлайн ALTER TABLE
, CREATE
INDEX
, или DROP INDEX
операторы, которые добавляют столбцы или добавляют или отбрасывание,
индексируют, подвергаются следующим ограничениям:
Данный онлайн ALTER
TABLE
может использовать только один из ADD COLUMN
, ADD INDEX
, или DROP INDEX
. Один или более
столбцов могут быть добавлены онлайн в единственном операторе; только один индексирует, может быть
создан или отброшен онлайн в единственном операторе.
Измененная таблица не блокируется относительно узлов API кроме того на который
онлайновое ALTER TABLE
ADD COLUMN
, ADD INDEX
, или DROP INDEX
работа (или CREATE INDEX
или DROP INDEX
оператор), выполняется. Однако, таблица блокируется против
любых других операций, происходящих на том же самом узле API, в
то время как онлайновая работа выполняется.
У таблицы, которая будет изменена, должен быть явный первичный ключ; скрытый
первичный ключ, создаваемый NDB
механизм хранения не достаточен с этой целью.
Механизм хранения, используемый таблицей, не может быть изменен онлайн.
Когда использующийся с MySQL Cluster Disk Data tables, не возможно изменить тип
хранения (DISK
или MEMORY
) из столбца онлайн.
Это означает, что, когда Вы добавляете или отбрасываете индексирование таким способом, которым работа
была бы выполнена онлайн, и Вы хотите, чтобы тип хранения столбца или столбцов был изменен, следует
использовать OFFLINE
ключевое слово в операторе, который добавляет или
отбрасывает индексирование.
Столбцы, которые будут добавлены онлайн, не могут использовать BLOB
или TEXT
введите, и должен соответствовать следующим критериям:
Столбцы должны быть динамичными; то есть, должно быть возможно создать их
использование COLUMN_FORMAT DYNAMIC
. Если Вы опускаете COLUMN_FORMAT DYNAMIC
опция, динамический формат столбца используется
автоматически.
Столбцы должны разрешить NULL
у значений и не есть
любое явное значение по умолчанию кроме NULL
. Столбцы, добавленные онлайн,
автоматически создаются как DEFAULT NULL
, как может быть замечен здесь:
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)mysql>SHOW CREATE TABLE t1\G
*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `c1` int(11) NOT NULL AUTO_INCREMENT, `c2` int(11) DEFAULT NULL, `c3` int(11) DEFAULT NULL, PRIMARY KEY (`c1`)) ENGINE=ndbcluster DEFAULT CHARSET=latin11 row in set (0.00 sec)
Столбцы должны быть добавлены после любых существующих столбцов. Если Вы пытаетесь
добавить столбец онлайн перед какими-либо существующими столбцами или использованием FIRST
ключевое слово, оператор перестал работать с ошибкой.
Существующие столбцы таблицы не могут быть переупорядочены онлайн.
Предыдущие ограничения не применяются к операциям, которые просто переименовывают таблицы или столбцы.
Для онлайн 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
ключевое слово.