• 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
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 1. MySQL 내부 사양
    2. MySQL 플러그인 API
    1. 플러그인 API의 특징
    2. 플러그인 API의 구성 요소
    3. 플러그인 유형
    4. 플러그인 작성
    1. 플러그인 제작 개요
    2. 플러그인 데이터 구조
    3. 플러그인 라이브러리의 컴파일 및 설치
    4. Full-Text Parser 플러그인 작성
    5. Daemon 플러그인 작성
    6. INFORMATION_SCHEMA 플러그인 작성
    7. Semisynchronous Replication 플러그인 작성
    8. Audit 플러그인 작성
    9. Authentication 플러그인 작성
    10. Password-Validation 플러그인 작성
    3. 플러그인을 위한 MySQL서비스
    4. MySQL에 새로운 함수 추가
    5. MySQL 디버그 및 이식
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

24.2.4.6 INFORMATION_SCHEMA 플러그인 작성

이 섹션에서는 INFORMATION_SCHEMA 테이블 서버 플러그인을 만드는 방법에 대해 설명합니다. 이러한 플러그인을 구현하기위한 코드 예제는 MySQL 소스 배포판의 sql/sql_show.cc 파일을 참조하십시오. InnoDB 소스에있는 플러그인의 예를 참조 할 수 있습니다. InnoDB 소스 트리의 handler/i_s.cc 파일 및 handler/ha_innodb.cc 파일을 참조하십시오 ( storage/innobase 디렉토리).

INFORMATION_SCHEMA 테이블 플러그인을 작성하려면 플러그인의 소스 파일에 다음 헤더 파일을 포함합니다. 플러그인의 기능 및 요구 사항에 따라 다른 MySQL의 헤더 파일이나 일반적인 헤더 파일이 필요할 수도 있습니다.

#include <sql_class.h>
#include <table.h>

이 헤더 파일은 MySQL 소스 배포판의 sql 디렉토리에 있습니다. 이들은 C ++ 구조체를 포함하고 있기 때문에, INFORMATION_SCHEMA 플러그인의 소스 파일 (C 대신) C ++ 코드로 컴파일해야합니다.

여기에서 생성하는 플러그인 예제 소스 파일은 simple_i_s_table.cc 라는 이름입니다. 이것은 SIMPLE_I_S_TABLE 라는 간단한 INFORMATION_SCHEMA 테이블을 만들고 NAME 과 VALUE 라는 2 개의 열이 있습니다. 테이블을 구현하는 플러그인 라이브러리의 일반 기술자는 다음과 같습니다.

mysql_declare_plugin(simple_i_s_library)
{
  MYSQL_INFORMATION_SCHEMA_PLUGIN,
  &simple_table_info,                /* type-specific descriptor */
  "SIMPLE_I_S_TABLE",                /* table name */
  "Author Name",                     /* author */
  "Simple INFORMATION_SCHEMA table", /* description */
  PLUGIN_LICENSE_GPL,                /* license type */
  simple_table_init,                 /* init function */
  NULL,
  0x0100,                            /* version = 1.0 */
  NULL,                              /* no status variables */
  NULL,                              /* no system variables */
  NULL,                              /* no reserved information */
  0                                  /* no flags */
}
mysql_declare_plugin_end;

name 멤버 ( SIMPLE_I_S_TABLE )는 INSTALL PLUGIN , UNINSTALL PLUGIN 등의 문에서 플러그인을 참조하는 데 사용할 이름을 지정합니다. 이것은 SHOW PLUGINS 또는 INFORMATION_SCHEMA.PLUGINS 에 의해 표시되는 이름이기도합니다.

일반 기술자의 simple_table_info 멤버는 유형별 API 버전 번호로만 구성된 유형별 디스크립터를 가리 킵니다.

static struct st_mysql_information_schema simple_table_info =
{ MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION };

일반 기술자는 초기화 함수 및 초기화 해제 함수를 가리 킵니다.

  • 초기화 함수는 테이블 구조와 테이블에 데이터를 채우는 함수에 대한 정보를 제공합니다.

  • 초기화 해제 함수는 필요한 모든 정리 작업을 수행합니다. 정리가 불필요한 경우,이 기술자 멤버는 (예제에 표시된대로) NULL 을 지정할 수 있습니다.

초기화 함수는 성공하면 0, 오류가 발생한 경우 1을 반환합니다. 이 함수는 일반 포인터를 받아 테이블 구조체에 대한 포인터로 해석합니다.

static int table_init(void *ptr)
{
  ST_SCHEMA_TABLE *schema_table= (ST_SCHEMA_TABLE*)ptr;

  schema_table->fields_info= simple_table_fields;
  schema_table->fill_table= simple_fill_table;
  return 0;
}

이 함수는 테이블 구조 다음의 두 멤버를 설정합니다.

  • fields_info : 각 컬럼에 대한 정보를 저장하는 ST_FIELD_INFO 구조체의 배열.

  • fill_table : 테이블에 데이터를 채우는 함수.

fields_info 의해 가리키는 배열에는 INFORMATION_SCHEMA 의 컬럼 당 하나의 요소 및 종단 요소가 포함되도록합니다. 플러그인 예제 다음 simple_table_fields 배열은 SIMPLE_I_S_TABLE 에 두 개의 열이 있다는 것을 보여줍니다. NAME 은 길이 10 바이트의 문자열 값이며 VALUE 는 표시 폭이 20 바이트의 정수 값입니다. 마지막 구조체는 배열의 끝을 보여줍니다.

static ST_FIELD_INFO simple_table_fields[]=
{
  {"NAME", 10, MYSQL_TYPE_STRING, 0, 0 0, 0},
  {"VALUE", 6, MYSQL_TYPE_LONG, 0, MY_I_S_UNSIGNED, 0, 0},
  {0, 0, MYSQL_TYPE_NULL, 0, 0, 0, 0}
};

컬럼의 정보 구조는 table.h 헤더 파일 ST_FIELD_INFO 의 정의를 참조하십시오. 허용되는 MYSQL_TYPE_ xxx 유형 값은 C API에서 사용되는 값입니다. 섹션 23.8.5 "C API 데이터 구조" 를 참조하십시오.

fill_table 회원은 테이블에 데이터를 이입하여 성공했을 경우는 0, 오류가 발생한 경우 1을 반환하는 함수를 설정합니다. 플러그인 예제의 경우 simple_fill_table() 함수는 다음과 같이되어 있습니다.

static int simple_fill_table(THD *thd, TABLE_LIST *tables, Item *cond)
{
  TABLE *table= tables->table;

  table->field[0]->store("Name 1", 6, system_charset_info);
  table->field[1]->store(1);
  if (schema_table_store_record(thd, table))
    return 1;
  table->field[0]->store("Name 2", 6, system_charset_info);
  table->field[1]->store(2);
  if (schema_table_store_record(thd, table))
    return 1;
  return 0;
}

이 함수는 INFORMATION_SCHEMA 테이블의 각 행의 각 열을 초기화하고 schema_table_store_record() 를 호출 해 행을 생성합니다. store() 메소드의 인수는 저장되는 값의 유형에 따라 다릅니다. 열 0 ( NAME 문자열)의 경우 store() 는 문자열에 대한 포인터의 길이 및 그 문자열의 문자 세트에 관한 정보를받습니다.

store(const char *to, uint length, CHARSET_INFO *cs);

컬럼 1 ( VALUE 정수)의 경우 store() 값과 그 값이 부호 없음인지 여부를 나타내는 플래그를받습니다.

store(longlong nr, bool unsigned_value);

INFORMATION_SCHEMA 테이블에 데이터를 채우는 방법에 대한 다른 예는 sql_show.cc 에서 schema_table_store_record() 의 인스턴스를 검색하십시오.

플러그인 라이브러리의 오브젝트 파일을 컴파일 및 설치하려면 섹션 24.2.4.3 "플러그인 라이브러리의 컴파일 및 설치" 단계를 참조하십시오. 라이브러리 파일을 사용하려면 라이브러리 파일이 플러그인 디렉토리 ( plugin_dir 시스템 변수에 지정된 디렉토리)에 설치되어 있어야합니다.

플러그인을 테스트하려면 플러그인을 설치합니다.

mysql> INSTALL PLUGIN SIMPLE_I_S_TABLE SONAME 'simple_i_s_table.so';

테이블이 존재하는지 확인합니다.

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
    -> WHERE TABLE_NAME = 'SIMPLE_I_S_TABLE';
+------------------+
| TABLE_NAME       |
+------------------+
| SIMPLE_I_S_TABLE |
+------------------+

선택을 시도합니다.

mysql> SELECT * FROM INFORMATION_SCHEMA.SIMPLE_I_S_TABLE;
+--------+-------+
| NAME   | VALUE |
+--------+-------+
| Name 1 |     1 |
| Name 2 |     2 |
+--------+-------+

제거합니다.

mysql> UNINSTALL PLUGIN SIMPLE_I_S_TABLE;


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