MySQL 네이티브 드라이버 플러그인 API
목차
- mysqlnd 플러그인과 MySQL 프록시 비교
- mysqlnd 플러그인 API 얻기
- MySQL 네이티브 드라이버 플러그인 아키텍처
- mysqlnd 플러그인 API
- mysqlnd 플러그인 구축 시작하기
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/mysqli
및 PDO_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.