|
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 ключевое слово.