• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    1. ALTER DATABASE 구문
    2. ALTER EVENT 구문
    3. ALTER LOGFILE GROUP 구문
    4. ALTER FUNCTION 구문
    5. ALTER PROCEDURE 구문
    6. ALTER SERVER 구문
    7. ALTER TABLE 구문
    1. ALTER TABLE 파티션 작업
    2. MySQL Cluster에서 ALTER TABLE 온라인 조작
    3. ALTER TABLE의 예
    8. ALTER TABLESPACE 구문
    9. ALTER VIEW 구문
    10. REATE DATABASE 구문
    11. CREATE EVENT 구문
    12. CREATE FUNCTION 구문
    13. CREATE INDEX 구문
    14. CREATE LOGFILE GROUP 구문
    15. CREATE PROCEDURE 및 CREATE FUNCTION 구문
    16. CREATE SERVER 구문
    17. CREATE TABLE 구문
    18. CREATE TABLESPACE 구문
    19. CREATE TRIGGER 구문
    20. CREATE VIEW 구문
    21. DROP DATABASE 구문
    22. DROP EVENT 구문
    23. DROP FUNCTION 구문
    24. DROP INDEX 구문
    25. DROP LOGFILE GROUP 구문
    26. DROP PROCEDURE 및 DROP FUNCTION 구문
    27. DROP SERVER 구문
    28. DROP TABLE 구문
    29. DROP TABLESPACE 구문
    30. DROP TRIGGER 구문
    31. DROP VIEW 구문
    32. RENAME TABLE 구문
    33. TRUNCATE TABLE 구문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.1.7.2 MySQL Cluster에서 ALTER TABLE 온라인 조작

이 섹션에서는 MySQL Cluster에서 구현 된 온라인 테이블 스키마 변경에 대해 설명합니다. InnoDB 스토리지 엔진 또한 MySQL Cluster에서 지원하는 것과 다른 구문을 사용하여 이러한 작업을 온라인으로 수행 할 수 있습니다. 자세한 내용은 섹션 14.11 "InnoDB와 온라인 DDL" 를 참조하십시오.

NDB 테이블의 가변 폭 컬럼에 인덱스를 추가 및 제거 작업은 온라인으로 실행됩니다. 온라인 작업은 복사하지 않고 있습니다. 즉, 인덱스를 다시 만들 필요가 없습니다. 변경되는 테이블은 MySQL Cluster 내의 다른 API 노드 액세스에서 고정 될 수는 없습니다 (단,이 섹션의 나머지 부분에있는 "제한"을 참조하십시오). 이러한 작업은 여러 API 노드를 포함하는 클러스터에서 열리는 NDB 테이블의 변경에 단일 사용자 모드는 필요하지 않습니다. 온라인 DDL 작업 중에도 트랜잭션은 중단없이 계속할 수 있습니다.

ONLINE 키워드를 사용하면 NDB 테이블에 대해 온라인 ADD COLUMN , ADD INDEX ( CREATE INDEX 문을 포함) 및 DROP INDEX 작업을 수행 할 수 있습니다. 또한 NDB 테이블의 온라인 이름 변경도 지원됩니다.

참고

ONLINE 및 OFFLINE 키워드는 MySQL Cluster에서만 지원됩니다. 표준 MySQL Server 5.6 릴리스에서는 ONLINE 또는 OFFLINE 키워드를 ALTER TABLE , CREATE INDEX 또는 DROP INDEX 문에서 사용하려고하면 오류가 발생합니다.

ONLINE 및 OFFLINE 키워드는 MySQL Cluster NDB 7.3에서 비추천입니다. MySQL Cluster NDB 7.4에서 계속 지원되지만 이후 버전의 MySQL Cluster에서 삭제 될 수 있습니다.

현재 디스크 기반의 컬럼을 NDB 테이블에 온라인으로 추가 할 수 없습니다. 즉, 테이블 수준 STORAGE DISK 옵션을 사용하는 NDB 테이블에 인 메모리 컬럼을 추가 할 경우 새 컬럼을 메모리 기반 스토리지의 사용으로 명시 적으로 선언해야합니다. 예를 들어, 이미 테이블 스페이스 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 does not 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: 0

mysql> 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: t1
Create 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=latin1
1 row in set (0.03 sec)
참고

STORAGE 및 COLUMN_FORMAT 키워드는 MySQL Cluster에서만 지원됩니다. 다른 어떤 버전의 MySQL에도이 두 가지 키워드를 CREATE TABLE 또는 ALTER TABLE 문에서 사용하려고하면 오류가 발생합니다.

NDB 테이블에서 문 ALTER ONLINE TABLE ... REORGANIZE PARTITION 을 partition_names INTO ( partition_definitions ) 옵션없이 사용할 수 있습니다. 이것을 사용하면 온라인 클러스터에 추가 된 새로운 데이터 노드 사이에서 MySQL Cluster 데이터를 재배포 할 수 있습니다. 이 문 자세한 내용은 섹션 13.1.7.1 "ALTER TABLE 파티션 작업" 을 참조하십시오. MySQL Cluster 데이터 노드를 온라인으로 추가하는 방법에 대한 자세한 내용은 섹션 18.5.13 "MySQL Cluster 데이터 노드의 온라인 추가" 를 참조하십시오.

MySQL Cluster 온라인 조작의 제한

온라인 DROP COLUMN 조작은 지원되지 않습니다.

컬럼을 추가하거나 인덱스를 추가 또는 삭제하는 온라인 ALTER TABLE , CREATE INDEX 또는 DROP INDEX 문은 다음의 제한에 따릅니다.

  • 특정 온라인 ALTER TABLE 에서 ADD COLUMN , ADD INDEX , DROP INDEX 중 하나만 사용할 수 있습니다. 하나의 문에서 하나 이상의 컬럼을 온라인으로 추가 할 수 있습니다. 하나의 문에서 하나의 인덱스만을 온라인으로 만들거나 삭제할 수 있습니다.

  • 변경되는 테이블은 온라인 ALTER TABLE ADD COLUMN , ADD INDEX 또는 DROP INDEX 조작 (또는 CREATE INDEX 또는 DROP INDEX 문)가 실행되는 API 노드 이외의 API 노드에 잠겨 없습니다. 그러나 온라인 작업이 실행되는 동안이 테이블은 동일한 API 노드에서 발생하는 다른 모든 작업에 잠겨 있습니다.

  • 변경되는 테이블에는 명시적인 기본 키가 존재해야합니다. NDB 스토리지 엔진에 의해 생성 된 숨겨진 기본 키는이 목적으로는 충분하지 않습니다.

  • 테이블에 사용되는 스토리지 엔진을 온라인으로 변경할 수 없습니다.

  • MySQL Cluster 디스크 데이터 테이블에서 사용 된 경우, 컬럼의 저장 형 ( 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 : t1
     Create 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 = latin1
     1 row in set (0.00 sec)
    
  • 이 컬럼은 기존의 모든 컬럼 뒤에 추가해야합니다. 기존 하나의 컬럼 앞에 또는 FIRST 키워드를 사용하여 온라인으로 컬럼을 추가하려고하면이 문은 오류로 실패합니다.

  • 기존 테이블 컬럼을 온라인으로 정렬 할 수 없습니다.

이전 제한은 테이블 또는 컬럼의 이름을 변경하면 작업에는 적용되지 않습니다.

NDB 테이블에 대한 온라인 ALTER TABLE 조작의 경우, 고정 형식의 열은 다음과 같이 온라인으로 추가하거나 인덱스를 온라인으로 만들거나 삭제 된 경우 동적 열로 변환됩니다.

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: 0

mysql> 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: 0

mysql> 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 키워드는 ONLINE 키워드를 사용하는 ALTER TABLE 문에서 지원됩니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved