MySQL 네이티브 드라이버 플러그인 API

목차

MySQL 네이티브 드라이버 플러그인 API는 MySQL 네이티브 드라이버 또는 mysqlnd의 기능입니다. mysqlnd 플러그인은 PHP 애플리케이션과 MySQL 서버 사이의 계층에서 작동합니다. 이것은 MySQL 프록시와 비슷합니다. MySQL 프록시는 모든 MySQL 클라이언트 애플리케이션(예: PHP 애플리케이션)과 MySQL 서버 사이의 계층에서 작동합니다. Mysqlnd 플러그인은 로드 밸런싱, 모니터링 및 성능 최적화와 같은 일반적인 MySQL 프록시 작업을 수행할 수 있습니다. 아키텍처와 위치가 다르기 때문에 mysqlnd 플러그인에는 MySQL Proxy의 단점이 없습니다. 예를 들어 플러그인을 사용하면 단일 실패 지점, 배포할 전용 프록시 서버, 배울 새로운 프로그래밍 언어(Lua)가 없습니다.

mysqlnd 플러그인은 mysqlnd의 확장으로 생각할 수 있습니다. 플러그인은 대부분의 mysqlnd 함수를 가로챌 수 있습니다. mysqlnd 함수는 ext/mysql, ext/mysqliPDO_MYSQL과 같은 PHP MySQL 확장에 의해 호출됩니다. 결과적으로 mysqlnd 플러그인이 클라이언트 애플리케이션에서 이러한 확장에 대한 모든 호출을 가로챌 수 있습니다.

내부 mysqlnd 함수 호출도 가로채거나 대체될 수 있습니다. mysqlnd 내부 함수 테이블을 조작하는 데에는 제한이 없습니다. 특정 mysqlnd 함수가 mysqlnd를 사용하는 확장에 의해 호출될 때 호출이 mysqlnd 플러그인의 적절한 함수로 전달되도록 설정할 수 있습니다. 이러한 방식으로 mysqlnd 내부 함수 테이블을 조작하는 기능은 플러그인에 대한 최대 유연성을 허용합니다.

mysqlnd 플러그인은 실제로 mysqlnd 플러그인 API(MySQL 기본 드라이버 mysqlnd에 내장됨)를 사용하는 C로 작성된 PHP 확장입니다. 플러그인은 PHP 애플리케이션에 100% 투명하게 만들 수 있습니다. 플러그인이 다른 계층에서 작동하기 때문에 애플리케이션을 변경할 필요가 없습니다. mysqlnd 플러그인은 mysqlnd 아래의 계층에서 작동하는 것으로 생각할 수 있습니다.

다음 목록은 mysqlnd 플러그인의 몇 가지 가능한 응용 프로그램을 나타냅니다.

  • Load Balancing
    • 읽기/쓰기 분할. 이에 대한 예는 PECL/mysqlnd_ms(마스터 슬레이브) 확장입니다. 이 확장은 복제 설정에 대한 읽기/쓰기 쿼리를 분할합니다.
    • Failover
    • Round-Robin, least loaded
  • 모니터링
    • Query Logging
    • Query Analysis
    • 쿼리 감사. 이에 대한 예는 PECL/mysqlnd_sip(SQL 주입 보호) 확장입니다. 이 확장은 쿼리를 검사하고 규칙 집합에 따라 허용된 쿼리만 실행합니다.
  • 성능
    • 캐싱. 이에 대한 예는 PECL/mysqlnd_qc(쿼리 캐시) 확장입니다.
    • Throttling
    • Sharding. 이에 대한 예는 PECL/mysqlnd_mc(다중 연결) 확장입니다. 이 확장은 SELECT ... LIMIT part_1, SELECT LIMIT part_n을 사용하여 SELECT 문을 n-파트로 분할하려고 시도합니다. 쿼리를 고유한 MySQL 서버로 보내고 클라이언트에서 결과를 병합합니다.

MySQL 네이티브 드라이버 플러그인 사용 가능

이미 사용 가능한 mysqlnd 플러그인이 많이 있습니다. 여기에는 다음이 포함됩니다.

  • PECL/mysqlnd_mc - Multi Connect plugin.
  • PECL/mysqlnd_ms - Master Slave plugin.
  • PECL/mysqlnd_qc - Query Cache plugin.
  • PECL/mysqlnd_pscache - Prepared Statement Handle Cache plugin.
  • PECL/mysqlnd_sip - SQL Injection Protection plugin.
  • PECL/mysqlnd_uh - User Handler plugin.