MySQL서버의 기본구조는 다음과 같다.
1. 하나의 프로세스가 접속대기, 데이터관리, 쿼리 처리를 전부 실행한다. (NDB는 제외)
2. 하나의 프로세스가 전부 데이터베이스를 관리
3. 멀티 쓰레드를 사용해서 처리를 분담. 접속대기와 I/O처리등 자식 쓰레드를 작성해서 분담한다.
4. 하나의 클라이언트에 하나의 자식 쓰레드를 생성. 클라이언트가 서버에 접속하면 그 클라이언트를 위해 한개의 쓰레드가 생성된다.
5. 데이터 보존형식이 여러개 존재한다. 이것은 테이블단위로 임의 선택,혼재 가능하다.
이것을 「스토리지엔진」,「테이블형」이라고 불린다. 스토리지엔진에는 MyISAM, InnoDB, NDB, MEMORY(HEAP)등이 있다.
6.클라이언트인증은 패스워드 인증. 인증에는 사용자명, 호스트명(IP address),패스워드가 사용된다.
7. 오퍼레이팅 시스템의 계정하고 MySQL서버관리 유저에는 관련성이 없다.
( 즉. "OS 계정은 이것이니까 접속유저는 이렇게 하지 않으면 안돼!", "OS계정은 이것이니까 사용하는 데이터베이스는 이것이 된다." 라는 건 없다. )
8.버전4.1이상에서는 클라이언트하고 서버가 사용하는 캐릭터셋(문자코드)가 틀린경우에는 서버가 문자코드변환을 실행한다. 캐릭터셋은 mysqld프로세스 단위, 데이터베이스 단위, 테이블 단위, 필드단위로 지정가능하다. 혼용도 가능하다.
통신형태
서버와 클라이언트간의 통신방법은 아래와 같다.
- TCP/IP
- 소켓파일(Unix계열)
- named pip(NT계열)
- shared memory(NT계열)
Unix계열 운영체제에서는 특히 지정이 없는 한 localhost서버에 대한 접속은 소켓파일로 실행된다. 다만 예외는 존재한다. Connector/J는 localhost서버에 TCP/IP접속한다.
윈도우즈에서는 통상 TCP/IP가 사용된다. named pipe, shared memory를 사용하는 경우에는 클라이언트 명령에 지정할 필요가 있다.
MySQL에는 「localhost」을 지정하는 경우와 「127.0.0.1」을 지정한 경우에 다른 취급을 하게된다. 클라이언트가 127.0.01의 서버에 접속하려한다면 TCP/IP를 사용한다.
통신방법지시예
shell$ mysql -hlocalhost <--소켓통신
shell$ mysql -h127.0.0.1 <--TCP/IP통신
shell$ mysql -hlocalhost -S/tmp/mysql.socket <--소켓통신 파일지정
shell$ mysql -hlocalhost --protocal=pipe <--named pipe로 접속
shell$ mysql -hlocalhost --pipe <-- named pipe로 접속
shell$ mysql -hlocalhost --protocal=memory --shared-memory-base-name=MySQL <--shared memory로 접속