24.2.4.7 Semisynchronous Replication 플러그인 작성
이 섹션에서는 MySQL 소스 배포판의 plugin/semisync
디렉토리에있는 플러그인 예제를 사용하여 준 동기 복제 서버 플러그인을 만드는 방법에 대해 설명합니다. 이 디렉토리에는 rpl_semi_sync_master
및 rpl_semi_sync_slave
라는 마스터 플러그인 및 슬레이브 플러그인의 소스 파일이 포함되어 있습니다. 여기에서는 플러그인 프레임 워크를 설치하는 방법에 대해서만 설명합니다. 플러그인 복제 기능을 구현하는 방법은 소스를 참조하십시오.
준 동기 복제 플러그인을 작성하려면 플러그인 소스 파일에 다음 헤더 파일을 포함합니다. 플러그인의 기능 및 요구 사항에 따라 다른 MySQL의 헤더 파일이나 일반적인 헤더 파일이 필요할 수도 있습니다.
#include <mysql/plugin.h>
plugin.h
은 MYSQL_REPLICATION_PLUGIN
서버 플러그인 유형 및 플러그인을 선언하는 데 필요한 데이터 구조를 정의합니다.
마스터 측의 경우 semisync_master_plugin.cc
에는 rpl_semi_sync_master
라는 플러그인 다음의 일반 기술자가 포함되어 있습니다.
mysql_declare_plugin(semi_sync_master) { MYSQL_REPLICATION_PLUGIN, &semi_sync_master_plugin, "rpl_semi_sync_master", "He Zhenxing", "Semi-synchronous replication master", PLUGIN_LICENSE_GPL, semi_sync_master_plugin_init, /* Plugin Init */ semi_sync_master_plugin_deinit, /* Plugin Deinit */ 0x0100 /* 1.0 */, semi_sync_master_status_vars, /* status variables */ semi_sync_master_system_vars, /* system variables */ NULL, /* config options */ 0, /* flags */ } mysql_declare_plugin_end;
슬레이브의 경우 semisync_slave_plugin.cc
에는 rpl_semi_sync_slave
라는 플러그인 다음의 일반 기술자가 포함되어 있습니다.
mysql_declare_plugin(semi_sync_slave) { MYSQL_REPLICATION_PLUGIN, &semi_sync_slave_plugin, "rpl_semi_sync_slave", "He Zhenxing", "Semi-synchronous replication slave", PLUGIN_LICENSE_GPL, semi_sync_slave_plugin_init, /* Plugin Init */ semi_sync_slave_plugin_deinit, /* Plugin Deinit */ 0x0100 /* 1.0 */, semi_sync_slave_status_vars, /* status variables */ semi_sync_slave_system_vars, /* system variables */ NULL, /* config options */ 0, /* flags */ } mysql_declare_plugin_end;
마스터 플러그인 및 슬레이브 플러그인의 두 경우 모두 일반 기술자는 유형별 기술자 초기화 함수 및 초기화 해제 함수 및 플러그인에 의해 구현되는 상태 변수와 시스템 변수에 대한 포인터가 있습니다. 변수의 설정 내용은 섹션 24.2.4.2.2 "서버 플러그인의 상태 변수 및 시스템 변수" 를 참조하십시오. 이후의 설명에서는 마스터 플러그인의 유형별 기술자 초기화 함수 및 초기화 해제 함수에 대해 설명하고 있습니다 만, 슬레이브 플러그인에도 마찬가지로 적용됩니다.
마스터의 일반 기술자의 semi_sync_master_plugin
멤버는 유형별 기술자를 의미하며 이것은 유형별 API 버전 번호만으로 구성되어 있습니다.
struct Mysql_replication semi_sync_master_plugin= { MYSQL_REPLICATION_INTERFACE_VERSION };
초기화 함수 및 초기화 해제 함수의 선언은 다음과 같이됩니다.
static int semi_sync_master_plugin_init(void *p); static int semi_sync_master_plugin_deinit(void *p);
초기화 함수는 포인터를 사용하여 트랜잭션 및 바이너리 로깅 "옵서버"를 서버에 등록합니다. 초기화가 성공한 후, 서버는 적절한시기에 옵저버를 호출합니다. (옵저버 내용은 소스 파일을 참조하십시오.) 초기화 해제 함수는 옵저버를 등록 해제하여 정리 작업을 수행합니다. 각 함수는 성공하면 0, 오류가 발생한 경우 1을 반환합니다.
플러그인 라이브러리의 오브젝트 파일을 컴파일 및 설치하려면 섹션 24.2.4.3 "플러그인 라이브러리의 컴파일 및 설치" 단계를 사용합니다. 라이브러리 파일을 사용하려면 라이브러리 파일이 플러그인 디렉토리 ( plugin_dir
시스템 변수에 지정된 디렉토리)에 설치되어 있어야합니다. rpl_semi_sync_master
플러그인 및 rpl_semi_sync_slave
플러그인의 경우 이러한 소스에서 MySQL을 빌드 할 때 컴파일 및 설치됩니다. 이들은 바이너리 배포판에 포함되어 있습니다. 빌드 프로세스에서는 semisync_master.so
및 semisync_slave.so
라는 공유 객체 라이브러리가 생성됩니다 (접미사는 플랫폼에 따라 달라질 수 있습니다.)