• 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
    3. 플러그인을 위한 MySQL서비스
    4. MySQL에 새로운 함수 추가
    1. 사용자 정의 함수 인터페이스 기능
    2. 새로운 사용자 정의 함수 추가
    1. 간단한 함수를위한 UDF 호출 순서
    2. 집계 함수를위한 UDF 호출 순서
    3. UDF 인수의 처리
    4. UDF의 반환 및 오류 처리
    5. 사용자 정의 함수의 컴파일 및 설치
    6. 사용자 정의 함수의 보안 예방 조치
    3. 새로운 Native 함수의 추가
    5. MySQL 디버그 및 이식
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

24.4.2.5 사용자 정의 함수의 컴파일 및 설치

UDF를 구현하는 파일 서버가 실행되는 호스트에서 컴파일 및 설치해야합니다. MySQL 소스 배포판에 포함되어있는 UDF 파일의 예 sql/udf_example.cc 을 사용하여이 프로세스에 대해 설명합니다.

슬레이브 서버에 복제되는 문 UDF가 참조되는 경우, 모든 슬레이브에서 함수를 사용할 수 있어야합니다. 그렇지 않으면, 슬레이브에서 그 함수를 호출하려고 할 때 복제가 슬레이브로 실패합니다.

다음 단계는 Unix의 경우입니다. Windows에서의 절차는이 섹션의 나머지에서 설명합니다.

udf_example.cc 파일은 다음의 함수가 포함되어 있습니다.

  • metaphon() 는 문자열 인수의 metaphon 문자열을 반환합니다. 이것은 soundex 문자열과 비슷하지만, 영어 전용으로 조정되어 있습니다.

  • myfunc_double() 는 인수의 문자의 ASCII 값의 합계를 그 인수의 길이의 합으로 나눈 값을 반환합니다.

  • myfunc_int() 는 인수의 길이의 합계를 반환합니다.

  • sequence([const int]) 는 지정된 숫자 또는 1 (값이 지정되지 않은 경우)에서 시작 순서를 돌려줍니다.

  • lookup() 는 호스트 이름의 IP 주소를 돌려줍니다.

  • reverse_lookup() 는 IP 주소에 대한 호스트 이름을 반환합니다. 이 함수는 'xxx.xxx.xxx.xxx' 형태의 단일 문자열 인수 또는 4 개의 숫자 중 하나를 사용하여 호출 할 수 있습니다.

  • avgcost() 는 평균 비용을 반환합니다. 이것은 집계 함수입니다.

동적으로로드 가능한 파일은 다음과 같은 명령을 사용하여 공유 가능한 오브젝트 파일로 컴파일합니다.

shell> gcc -shared -o udf_example.so udf_example.cc

CMake에 gcc를 사용하는 경우 (MySQL은 그렇게 구성되어 있습니다) 더 간단한 명령 udf_example.so 을 만들 수 있습니다.

shell> make udf_example

UDF가 포함되어있는 공유 객체를 컴파일 한 후 공유 객체를 설치하여 MySQL에 통지해야합니다. gcc를 사용하여 udf_example.cc 에서 공유 객체를 컴파일하면 udf_example.so 라는 파일을 직접 생성됩니다. 공유 객체를 서버 플러그인 디렉토리에 복사하고 udf_example.so 이름을 지정합니다. 이 디렉토리는 plugin_dir 시스템 변수의 값을 얻을 수 있습니다.

일부 시스템에서는 동적 링커를 구성하는 ldconfig 프로그램은 공유 객체의 이름이 lib 로 시작되지 않으면 공유 오브젝트를 인식하지 않습니다. 이 경우, 예를 들어, 파일 이름을 udf_example.so 에서 libudf_example.so 이름 변경하십시오.

Windows에서 다음 단계를 사용하여 사용자 정의 함수를 컴파일 할 수 있습니다.

  1. MySQL 소스 배포판을 가져옵니다. 섹션 2.1.3 "MySQL를 얻는 방법" 을 참조하십시오.

  2. 필요한 경우 CMake 빌드 유틸리티를 http://www.cmake.org 에서 가져옵니다. (버전 2.6 이상이 필요합니다).

  3. 소스 트리에서 sql 디렉토리를 참조합니다. 그 곳에는 udf_example.def udf_example.cc 라는 파일이 있습니다. 두 파일을이 디렉토리에서 작업 디렉토리에 복사합니다.

  4. 다음 내용을 가지는 CMake의 makefile ( CMakeLists.txt )을 만듭니다.

    PROJECT(udf_example)
    
    # Path for MySQL include directory
    INCLUDE_DIRECTORIES("c:/mysql/include")
    
    ADD_DEFINITIONS("-DHAVE_DLOPEN")
    ADD_LIBRARY(udf_example MODULE udf_example.cc udf_example.def)
    TARGET_LINK_LIBRARIES(udf_example wsock32)
    
  5. VC 프로젝트 파일 및 솔루션 파일을 만듭니다.

    cmake -G "<Generator>"
    

    cmake --help를 호출하면 유효한 발전기의 목록이 표시됩니다.

  6. udf_example.dll 을 만듭니다.

    devenv udf_example.sln /build Release
    

공유 객체 파일이 설치되면 다음 문을 사용하여 새로운 함수에 대해 mysqld 통지합니다. 사용하는 시스템 객체 파일의 접미사가 .so 가 아닌 경우 올바른 접미사에 모든 대체합니다 (예를 들어, Windows의 경우 .dll ).

mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';
mysql> CREATE FUNCTION myfunc_double RETURNS REAL SONAME 'udf_example.so';
mysql> CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME 'udf_example.so';
mysql> CREATE FUNCTION sequence RETURNS INTEGER SONAME 'udf_example.so';
mysql> CREATE FUNCTION lookup RETURNS STRING SONAME 'udf_example.so';
mysql> CREATE FUNCTION reverse_lookup
    ->        RETURNS STRING SONAME 'udf_example.so';
mysql> CREATE AGGREGATE FUNCTION avgcost
    ->        RETURNS REAL SONAME 'udf_example.so';

함수를 삭제하려면 DROP FUNCTION 을 사용합니다.

mysql> DROP FUNCTION metaphon;
mysql> DROP FUNCTION myfunc_double;
mysql> DROP FUNCTION myfunc_int;
mysql> DROP FUNCTION sequence;
mysql> DROP FUNCTION lookup;
mysql> DROP FUNCTION reverse_lookup;
mysql> DROP FUNCTION avgcost;

CREATE FUNCTION 문 및 DROP FUNCTION 문은 mysql 데이터베이스 func 시스템 테이블을 업데이트합니다. 함수의 이름, 형태, 및 공유 라이브러리 이름은 테이블에 저장됩니다. 함수를 작성하거나 삭제하려면 mysql 데이터베이스 INSERT 권한 또는 DELETE 권한을 각각 가지고 있어야합니다.

이미 생성 된 함수를 CREATE FUNCTION 을 사용하여 추가하지 마십시오. 함수를 다시 설치해야하는 경우 DROP FUNCTION 을 사용하여 함수를 제거하고, CREATE FUNCTION 을 사용하여 다시 설치해야합니다. 이렇게해야하는 것은, 예를 들어, mysqld가 함수의 새 버전을 얻을 수 있도록 새로운 버전을 다시 컴파일하는 경우입니다. 그렇지 않으면 서버는 이전 버전을 사용하고 있습니다.

활성 함수는 CREATE FUNCTION 을 사용하여로드되고 있고, DROP FUNCTION 을 사용하여 삭제되지 않은 함수입니다. 모든 활성 함수는 서버가 시작할 때마다 다시로드됩니다 만, --skip-grant-tables 옵션을 지정해 mysqld를 시작하면 다릅니다. 이 경우, UDF 초기화가 생략되고 UDF는 사용할 수 없습니다.

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