CS/Data Base

[MySQL] MySQL 서버 설정

hojak99 2020. 2. 13. 00:03

해당 내용은 Real MySQL 책을 인용하였습니다.

MySQL 서버를 세팅할 때 구글링을 해서 셋팅해서 사용하고 그랬었는데 서버 셋팅 시 어느 정도 지식이 있어야 함을 느꼈다.

서버 설정

MySQL 서버는 단 하나의 설정 파일만 사용한다. 리눅스/유닉스 계열에서는 my.cnf, 윈도우 계열에서는 my.ini 파일을 사용한다. 이 파일의 이름을 변경할 수 없으니 참고해야 한다.

또 중요한 점은 이 설정 파일들이 여러 디렉토리에 존재할 수 있다.
MySQL 서버에서는 지정된 디렉토리를 순차적으로 탐색하면서 처음 발견된 설정 파일을 사용한다.
(물론 지정된 디렉토리를 다르게 설정할 수도 있다)

리눅스 서버에서 MySQL 서버를 셋팅했다고 가정하고 얘기를 하도록 하겠다.
만약 여러 개의 설정 파일들이 있고, 어떤 my.cnf 설정 파일을 사용하는지 모르겠다면 꼭 확인이 필요할 것이다.

이 때 아래의 명령어를 사용할 수 있다.

// vervose, help 옵션 중 하나라도 빠지면 실제 MySQL 기동할 수 있으므로 주의하자
> mysqld --verbose --help  
...  
Default options are read from the following files in the given order:  
/etc/my.cnf /etc/mysql/my.cnf /user/local/mysql/etc/my.cnf ~/.my.cnf

위 코드를 보시다시피 처음 지정된 것부터 순서대로 파일을 찾는다.

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /user/local/mysql/etc/my.cnf
  4. ~/my.cnf

이런 식으로 파악을 할 수가 있다.

설정 파일의 구성

이제 my.cnf 를 확인해보자. my.cnf 에는 여러 개의 설정 그룹을 담을 수 있고, 대체로 바이너리 프로그램 이름을 그룹명으로 사용한다.

[client] (mysqld, mysqld_safe 를 제외한대부분의 클라이언트 프로그램이 공유함)
default-character-set = utf8

[mysql] (mysql client)
socket = /user/ ...........
port = 3304

[mysqld]  (mysql 서버)
port = 3306
...

MySQL 시스템 변수의 특징

MySQL 서버는 기동하면서 설정 파일의 내용을 읽어 메모리나 작동 방식을 초기화하고, 접속된 사용자를 제어하기 위해 이러한 값을 별도로 저장해 둔다.
MySQL 에서는 이것을 Variable 이라고 표현한다.

해당 시스템 변수, 즉 Variable 은 SHOW VARIABLES, SHOW GLOBAL VARIABLES 라는 명령으로 확인 가능하다.

주의해야 할점은 해당 변수들이 글로벌 변수인지, 세션 변수인지 구분할 수 있어야 한다는 점이다.
글로벌 변수는 해당 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수를 의미한다.
세션 변수는 클라이언트가 서버에 접속할 때 기본적으로 부여하는 옵션의 기본값을 제어하는데 사용된다. 커넥션이 끊긴다면 변경한 세션 변수는 기본 값으로 초기화 된다.

동적 변수와 정적 변수

MySQL서버의 시스템 변수는 기동 중일 때 변경 가능한지 여부에 따라 동적 변수, 정적 변수로 구분한다.
my.cnf 파일을 변경하는 경우와 기동 중인 MySQL 서버의 메모리에 있는 시스템 변수를 변경하는 경우가 있다.

전자는 MySQL서버가 재시작하기 전에는 적용되지 않는다.
후자는 SET 명령을 통해 변경할 수 있다. 그러나 변경되는 시스템 변수 값이 my.cnf 파일에는 적용이 되지 않기 때문에 기동 중인 서버 인스턴스에서만 유효하다. 서버 재시작 시 초기화 되니 변경 시 my.cnf 에도 반영이 필요하다.

반응형