• 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 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 1. MySQL Cluster 개요
    2. MySQL Cluster 설치
    1. MySQL Cluster Auto-Installer
    2. Linux에서 MySQL Cluster 설치
    3. Windows에서 MySQL Cluster 설치
    4. MySQL Cluster의 초기 구성
    5. MySQL Cluster의 초기 시작
    6. 테이블 및 데이터를 포함 MySQL Cluster의 예제
    7. MySQL Cluster의 안전한 종료 및 재시작
    8. MySQL Cluster NDB 7.3 업그레이드 및 다운 그레이드
    3. MySQL Cluster 설정
    4. MySQL Cluster 프로그램
    5. MySQL Cluster 관리
    6. MySQL Cluster Replication
    7. MySQL Cluster Release Notes
  • 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 새로운 기능

18.2.6 테이블 및 데이터를 포함 MySQL Cluster의 예제

참고

이 섹션의 정보는 Unix 및 Windows 플랫폼에서 실행되는 MySQL Cluster에 적용됩니다.

MySQL Cluster의 데이터베이스 데이 황소와 데이터의 조작은 표준 MySQL의 경우와 거의 차이가 없습니다. 유의해야 할 중요한 포인트가 2 개 있습니다.

  • 클러스터에서 복제되는 테이블은 NDBCLUSTER 스토리지 엔진을 사용해야합니다. 이것을 지정하려면 테이블을 만들 때 ENGINE=NDBCLUSTER 또는 ENGINE=NDB 옵션을 사용합니다.

    CREATE TABLE tbl_name (col_name column_definitions) ENGINE=NDBCLUSTER;
    

    또는 다른 스토리지 엔진을 사용하는 기존 테이블에 대한 ALTER TABLE 을 사용하여 NDBCLUSTER 를 사용하도록 테이블을 변경합니다.

    ALTER TABLE tbl_name ENGINE=NDBCLUSTER;
    
  • 모든 NDBCLUSTER 테이블에는 기본 키가 있습니다. 테이블을 만들 때 사용자가 기본 키를 정의하지 않은 경우 NDBCLUSTER 스토리지 엔진이 숨겨진 기본 키를 자동으로 생성합니다. 이러한 키는 다른 테이블 인덱스와 같은 크기의 공간을 차지합니다. (이 자동으로 생성되는 인덱스를 저장하는 메모리가 충분하지 않기 때문에 문제가 발생하는 것은 드문 일이 아니다.)

mysqldump의 출력을 사용하여 기존 데이터베이스에서 테이블을 가져올 경우 SQL 스크립트를 텍스트 편집기에서 열고 테이블 생성 구문에 ENGINE 옵션을 추가하거나 기존 ENGINE 옵션을 바꿀 수 있습니다. MySQL Cluster를 지원하지 않는 다른 MySQL 서버에 world 샘플 데이터베이스가 있으며 City 테이블을 export 할 필요가 있다고합니다.

shell> mysqldump --add-drop-table world City > city_table.sql

이 결과 생성되는 city_table.sql 파일이 테이블 생성 문 (테이블 데이터를 가져 오는 데 필요한 INSERT 문)이 포함됩니다.

DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` char(35) NOT NULL default '',
  `CountryCode` char(3) NOT NULL default '',
  `District` char(20) NOT NULL default '',
  `Population` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
(remaining INSERT statements omitted)

MySQL이 테이블에 NDBCLUSTER 스토리지 엔진을 사용하는지 확인해야합니다. 이렇게 두 가지 방법이 있습니다. 하나는 테이블 정의를 클러스터 데이터베이스로 가져 오기 전에 변경 될 수 있습니다. 예 City 테이블을 사용하여 정의 ENGINE 옵션을 다음과 같이 변경합니다.

DROP TABLE IF EXISTS `City`;
CREATE TABLE `City` (
  `ID` int(11) NOT NULL auto_increment,
  `Name` char(35) NOT NULL default '',
  `CountryCode` char(3) NOT NULL default '',
  `District` char(20) NOT NULL default '',
  `Population` int(11) NOT NULL default '0',
  PRIMARY KEY  (`ID`)
) ENGINE=NDBCLUSTER DEFAULT CHARSET=latin1;

INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
(remaining INSERT statements omitted)

클러스터 된 데이터베이스의 일부가 될 개별 테이블 정의에서이를 수행해야합니다. 이렇게하는 가장 쉬운 방법은 정의가 포함 된 파일에 대해 검색 치환을 실행하고 TYPE= engine_name 또는 ENGINE= engine_name 의 모든 인스턴스를 ENGINE=NDBCLUSTER 로 대체하는 것입니다. 파일을 변경하고 싶지 않은 경우 변경되지 않은 파일을 사용하여 테이블을 작성하고 ALTER TABLE 을 사용하여 스토리지 엔진을 변경합니다. 자세한 내용은이 섹션 뒷부분합니다.

클러스터 SQL 노드에 world 라는 데이터베이스가 이미 생성되어있는 것을 전제로 mysql 명령 행 클라이언트를 사용하여 city_table.sql 을 읽고 대응하는 테이블을 정상적인 방법으로 만들어 채 웁니다.

shell> mysql world < city_table.sql

매우 중요한 고려 사항으로 위의 명령은 SQL 노드를 실행하는 호스트 (이 경우는 IP 주소가 192.168.0.20 의 머신)에서 실행해야합니다.

SQL 노드에서 world 전체 데이터베이스의 복사본을 만들려면 클러스터되지 않은 서버에서 mysqldump를 사용하여 (예를 들어) /tmp 디렉토리의 world.sql 라는 파일에 데이터베이스를 내보낼 수 있습니다. 다음은 위에서 설명한대로 테이블 정의를 변경하고 이러한 파일을 클러스터의 SQL 노드로 가져옵니다.

shell> mysql world < /tmp/world.sql

파일을 다른 위치에 저장하려면, 그에 따라 이전 단계를 조정하십시오.

SQL 노드에서 SELECT 쿼리의 실행은 MySQL 서버의 다른 인스턴스에서 실행 다르지 않습니다. 명령 행에서 쿼리를 실행하려면 먼저 일반적인 방법으로 ( Enter password: 프롬프트에서 root 암호를 지정하고) MySQL Monitor에 로그인해야합니다.

shell> mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.6.27-ndb-7.4.9

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

여기에서는 MySQL 서버의 root 계정을 사용하여 MySQL 서버 설치에 대한 표준 보안 대책 (강력한 root 암호 설정을 포함)에 따른다고 가정합니다. 자세한 내용은 섹션 2.10.2 "처음 MySQL 계정 보안 설정" 을 참조하십시오.

클러스터 노드가 서로 액세스 할 때 MySQL 권한 시스템이 사용되지 않을 것을 고려하십시오. MySQL 사용자 계정 ( root 계정 포함)의 설정 또는 변경은 SQL 노드에 액세스하는 응용 프로그램에만 영향을 노드 간의 상호 작용에 영향을주지 않습니다. 자세한 내용은 섹션 18.5.11.2 "MySQL Cluster와 MySQL 권한" 을 참조하십시오.

SQL 스크립트를 가져 오기 전에 테이블 정의 ENGINE 절을 변경하지 않은 경우이 시점에서 다음 문을 실행하십시오.

mysql> USE world;
mysql> ALTER TABLE City ENGINE=NDBCLUSTER;
mysql> ALTER TABLE Country ENGINE=NDBCLUSTER;
mysql> ALTER TABLE CountryLanguage ENGINE=NDBCLUSTER;

데이터베이스의 선택과 데이터베이스의 테이블에 대한 SELECT 쿼리의 실행도 MySQL Monitor의 종료와 마찬가지로 일반적인 방법으로합니다.

mysql> USE world;
mysql> SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5;
+-----------+------------+
| Name      | Population |
+-----------+------------+
| Bombay    |   10500000 |
| Seoul     |    9981619 |
| São Paulo |    9968485 |
| Shanghai  |    9696300 |
| Jakarta   |    9604900 |
+-----------+------------+
5 rows in set (0.34 sec)

mysql> \q
Bye

shell>

MySQL을 사용하는 응용 프로그램은 표준 API를 사용하여 NDB 테이블에 액세스 할 수 있습니다. 응용 프로그램은 관리 노드와 데이터 노드가 아닌 SQL 노드에 액세스해야합니다. 이 간단한 예제에서는 네트워크의 다른 위치에있는 Web 서버에서 실행되는 PHP 5.X의 mysqli 확장을 사용하여 여기에 표시된 SELECT 문을 실행하는 방법을 보여줍니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type"
           content="text/html; charset=iso-8859-1">
  <title>SIMPLE mysqli SELECT</title>
</head>
<body>
<?php
  # connect to SQL node:
  $link = new mysqli('192.168.0.20', 'root', 'root_password', 'world');
  # parameters for mysqli constructor are:
  #   host, user, password, database

  if( mysqli_connect_errno() )
    die("Connect failed: " . mysqli_connect_error());

  $query = "SELECT Name, Population
            FROM City
            ORDER BY Population DESC
            LIMIT 5";

  # if no errors...
  if( $result = $link->query($query) )
  {
?>
<table border="1" width="40%" cellpadding="4" cellspacing ="1">
  <tbody>
  <tr>
    <th width="10%">City</th>
    <th>Population</th>
  </tr>
<?
    # then display the results...
    while($row = $result->fetch_object())
      printf("<tr>\n  <td align=\"center\">%s</td><td>%d</td>\n</tr>\n",
              $row->Name, $row->Population);
?>
  </tbody
</table>
<?
  # ...and verify the number of rows that were retrieved
    printf("<p>Affected rows: %d</p>\n", $link->affected_rows);
  }
  else
    # otherwise, tell us what went wrong
    echo mysqli_error();

  # free the result set and the mysqli connection object
  $result->close();
  $link->close();
?>
</body>
</html>

여기에서는 Web 서버에서 실행되고있는 프로세스가 SQL 노드의 IP 주소에 도달 할 수 있다고 가정합니다.

같은 방법으로, MySQL C API, Perl-DBI, Python-mysql 또는 MySQL Connector를 사용하여 MySQL에서 일반적으로 수행하는 동일한 데이터의 정의 및 조작 작업을 수행 할 수 있습니다.

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