바로 요점
대부분의 시스템과 마찬가지로 mysql은 외부 서비스에 대한 C / S 아키텍처 모델을 따릅니다. 필요한 구성 요소는 다음과 같습니다 : MySQL 서버 —mysql 서버, 클라이언트 프로그램 — 클라이언트 프로그램 및 MySQL 비 클라이언트 프로그램 — 비 클라이언트 프로그램 전체 애플리케이션 아키텍처는 다음과 같습니다.
클라이언트 프로그램
클라이언트 프로그램은 서버에 연결하여 데이터를 얻고, 수정하고, 추가하고, 삭제하는 데 사용됩니다. 일반적으로 사용되는 것은 다음과 같습니다.
- mysql : 쿼리 실행 및 결과보기 --- 쿼리 시작 및 결과보기;
- mysqladmin : 서버를 관리합니다 .— 관리 서버 프로그램;
- mysqlcheck : 데이터베이스 테이블의 무결성을 확인합니다 .— 데이터베이스 테이블의 무결성을 확인합니다.
- mysqldump : 논리적 백업을 생성합니다 .— 논리적 백업을 생성합니다.
- mysqlimport : 텍스트 데이터 파일 가져 오기-데이터 파일 가져 오기;
- mysqlshow : 데이터베이스, 테이블 및 열 정보 표시-데이터베이스, 테이블 및 열 정보보기;
- mysqlslap : 클라이언트로드를 에뮬레이트합니다 .— 클라이언트로드를 시뮬레이션합니다.
관리 및 유틸리티 프로그램
비 클라이언트 프로그램은 링크를 통하지 않고 데이터에 직접 액세스하는 데 사용됩니다. 일반적으로 다음과 같이 사용됩니다.
- innochecksum : InnoDB 테이블 스페이스 파일을 오프라인으로 확인합니다 .—InnoDB 테이블 스페이스 파일을 오프라인으로 확인합니다.
- mysqldumpslow : 느린 쿼리 로그 파일을 요약합니다 .—mysql의 느린 쿼리 로그를 쿼리합니다.
- mysqlbinlog : 바이너리 로그 파일을 표시합니다 .— 바이너리 로그보기
mysql 서버
서버 프로세스. A를 참조 mysqld를 호출 프로세스 A는, 단일 프로세스 멀티 스레드 애플리케이션 (UNIX 시스템) . 데이터 액세스 및 스토리지를 관리하고, 동시 클라이언트 링크를 지원하고, 여러 스토리지 엔진을 지원하고, 트랜잭션 / 비 트랜잭션 테이블을 지원하는 데 사용됩니다. mysqld 서버 프로세스의 아키텍처는 나중에 자세히 설명합니다.
서버 측 아키텍처
mysqld 서비스 프로그램은 논리적으로 연결 계층, SQL 계층 및 스토리지 계층의 세 부분 으로 나뉩니다 . 연결 계층은 다양한 방식 (TCP / IP, 유닉스 소켓 등)으로 액세스 링크를 처리하는 데 사용됩니다 .SQL 계층은 클라이언트 프로그램에서 제출 한 SQL 요청을 처리하는 데 사용되며 스토리지 계층은 데이터 저장을 관리하는 데 사용됩니다. 다른 저장 엔진 및 다른 저장 방법 (인 메모리 또는 파일) 등을 포함합니다.
연결 계층
연결 계층은 여러 통신을 통해 애플리케이션의 연결을 허용합니다.
프로토콜 :
• TCP / IP
• UNIX 소켓
• 공유 메모리
• 명명 된 파이프
연결 계층은 다른 응용 프로그램 / 다른 프로토콜에서 연결 요청을 수신하는 데 사용됩니다. 허용되는 통신 프로토콜은 TCP / IP, unix 도메인 소켓 (예 : unix), 공유 메모리 (windows), 명명 된 파이프 (windows)입니다.
SQL 계층
SQL 계층 사용자는 연결 후 다음과 같은 다양한 SQL 요청을 처리합니다.
- 권한 부여 및 파서 : 파서는 올바른 구문의 유효성을 검사 한 다음 권한 부여는 연결된 사용자가 특정 쿼리를 실행할 수 있는지 확인합니다.
- Optimizer 优化 : 질의를 최적의 방법으로 실행하는 방법에 대한 단계별 지침 집합 인 각 질의에 대한 실행 계획을 생성합니다. 사용할 인덱스와 테이블 처리 순서를 결정하는 것은이 단계에서 가장 중요한 부분입니다.
옵티마이 저는 각 쿼리에 대한 실행 계획을 생성합니다 (최적의 방식으로 쿼리를 실행하는 방법을 나타내는 데 일련의 순차적 명령어 세트가 사용됨). SQL 문에 대해 시스템에서 생성 한 실행 계획을보기 위해 SQL 문 앞에 Explain 키워드를 추가하는 데 사용됩니다.
- 쿼리 실행 : 각 쿼리에 대한 실행 계획을 수행합니다.
- 쿼리 캐시 查询 缓存 : 실행 된 쿼리 및 결과를 기억 (즉시 반환)하는 데 사용할 수있는 선택적으로 구성 가능한 쿼리 캐시;
쿼리 결과를 메모리에 캐시하는 데 사용되며 동일한 SQL을 사용하여 메모리에서 직접 결과를 얻을 수 있습니다.
- 쿼리 로깅 : 실행 된 쿼리를 추적하도록 활성화 할 수 있습니다.
위의 설명에 따르면 mysql에서 SQL 문의 실행 흐름은 다음과 같다.
저장 레이어
MySQL은 다양한 유형의 스토리지 (스토리지 엔진)를 지원하고 다양한 미디어 (메모리 메모리, 디스크 디스크, 네트워크 네트워크 등)에 데이터 저장을 지원합니다.
다른
스토리지 엔진
简介 : 스토리지 엔진은 다양한 테이블 유형에 대한 처리기 역할을하는 서버 구성 요소입니다.
스토리지 엔진은 데이터를 저장하고, 데이터를 얻고, 인덱스를 통해 데이터를 찾는 데 사용됩니다.
MySQL 디스크 공간 사용량
MySQL의 디스크 공간 사용은 아래 그림과 같습니다. mysqld 인스턴스 설치에는 실행 프로그램 파일, 실행 프로그램 로그 파일 및 mysqld 데이터 디렉터리가 포함됩니다.이 중 mysqld 데이터 디렉터리에는 서버 로그 파일, InnoDB 로그 파일, 데이터 디렉터리 (트리거, 데이터 및 인덱스 파일, 데이터 형식 파일)가 포함됩니다. 등등.
MySQL 메모리 사용량
MySQL 메모리는 글로벌 및 세션의 두 가지 범주로 나뉩니다. 글로벌 글로벌 수준은 프로세스의 모든 스레드간에 공유되며 세션 세션 수준은 각 스레드에 대해 별도로 할당되며 스레드 생성 및 소멸은 동적으로 할당 및 소멸됩니다.
MySQL 플러그인 인터페이스
MySQL 플러그인 API는 스토리지 엔진, 전체 텍스트 인덱스 파서 등과 같은 서버 측 구성 요소의 동적로드 / 언로드를 허용합니다.
요약하자면
MySQL의 계층 적 설계는 다양한 기능 구성 요소의 분리를 극대화합니다. 통신 산업의 5 계층 통신 프로토콜 스택과 유사하게 각 계층은 자체 기능을 독립적으로 담당하고 하위 계층은 상위 계층이 필요없이 상위 계층에 서비스를 제공합니다. 레이어 세부 정보.