반응형
12-24 00:25
Today
Total
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
관리 메뉴

개발하는 고라니

[Database] MySQL 설치 및 설정 본문

Database/MySQL

[Database] MySQL 설치 및 설정

조용한고라니 2022. 1. 9. 15:03
반응형

MySQL 설치

[environment]

  • Mac OS (M1)
    • mysql (latest)
    • linux/amd64

 

Docker가 이미 설치되어 있다는 가정하에 진행해본다.

$ docker run -p 3306:3306 \
    --platform linux/amd64 \ 
    --name mysql-db \ 
    -e MYSQL_ROOT_PASSWORD=[password] \ 
    -e MYSQL_DATABASE=[database] \
    -e MYSQL_USER=[username] \
    -e MYSQL_PASSWORD=[password] \
    -d mysql

 

MySQL 컨테이너가 실행된 것을 확인하고 컨테이너에 들어가보자.

$ docker ps -a
$ docker exec -it mysql-db

 

[MySQL 실행 파일 위치 및 설정 파일 위치]

$ which mysql
# /usr/bin/mysql

$ find / -name "my.cnf"
# /etc/mysql/my.cnf

[MySQL 서버 연결]

# root 계정으로 접속

$ mysql -uroot -p[password] --host=localhost --socket=/tmp/mysql.sock #소켓

$ mysql -uroot -p[password] --host=127.0.0.1 --port=3306 #TCP/IP
$ mysql -uroot -p[password] -h127.0.0.1 --port=3306 #TCP/IP

$ mysql -uroot -p[password] #소켓

 

첫 번째 예제는 MySQL 소켓 파일을 이용해 접속하는 예제.

두 번째 예제는 TCP/IP를 통해 127.0.0.1로 접속하는 예제.

 

로컬 서버에 설치된 MySQL이 아니라 원격 호스트에 있는 MySQL서버에 접속할 때는 반드시 두 번째 방법을 사용해야 한다. MySQL 서버에 접속할 때 호스트를 localhost로 명시하는 것과 127.0.0.1로 명시하는 것은 각각 의미가 다르다.

 

--host=localhost 옵션을 사용하면 MySQL 클라이언트 프로그램은 항상 소켓 파일을 통해 MySQL 서버에 접속하게 되는데, 이는 'Unix Domain socket'을 이용하는 방식으로 TCP/IP를 통한 통신이 아니라 유닉스의 프로세스 간 통신(IPC, Inter Process Communication)의 일종이다.

 

하지만 --host=127.0.0.1을 사용하는 경우, 자기 서버를 가리키는 루프백 IP 이기는 하지만, TCP/IP 통신 방식을 사용하는 것이다.

 

세 번째 예제는 별도로 호스트 주소와 포트를 명시하지 않는다. 이 경우에는 기본값으로 호스트는 localhost가 되며, 소켓 파일을 사용하게 되는데, 소켓 파일의 위치는 MySQL 서버를 재시작 하지 않으면 다시 만들어 낼 수 없기 때문에 실수로 삭제하지 않도록 주의한다.

MySQL 설정

일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 유닉스 계열에서는 "my.cnf", 윈도우 계열에서는 "my.ini"라는 이름을 사용한다. MySQL 서버는 시작될 때만 이 설정 파일을 참조하는데, 이 설정 파일의 경로가 고정되어 있는 것은 아니다. MySQL 서버는 지정된 여러 개의 디렉토리를 순차적으로 탐색하다가, 처음 발견한 my.cnf를 사용한다.

 

MySQL 서버가 어떤 설정 디렉토리에서 설정 파일을 읽는지 확인하려면 다음 명령어를 실행해보자.

# mysql이 가동 중일 땐 지양하자.
$ mysqld --verbose --help

# 되도록 이 명령어를 사용한다.
$ mysql --help

글로벌 변수와 세션 변수

MySQL 서버는 설정 파일로 메모리나 작동 방식을 초기화하고, 사용자를 제어하기 위해 이를 별도로 저장해둔다. 이 값을 시스템 변수라 한다.

$ mysql > show variables;
$ mysql > show gloabal variables;

 

시스템 변수는 5가지의 속성을 가지는데, 이는 링크에서 참고할 수 있으며 각 속성은 다음과 같다.

Name Description
Cmd-Line MySQL 서버의 명령행 인자로 설정될 수 있는지 여부
Option file my.cnf로 제어할 수 있는지 여부
System Var 시스템 변수인지 아닌지 여부. MySQL 서버의 설정 파일을 작성할 때 각 변수명에 사용된 하이픈(-)이나 언더스코어(_)의 구분에 주의해야 한다.

MySQL 8.0은 모든 시스템 변수들이 '_'를 구분자로 사용하도록 변경된 것으로 보이며, 명령행 옵션으로만 사용 가능한 설정은 '-'을 구분자로 사용한다.
Var Scope 시스템 변수의 적용 범위를 나타낸다. 이 변수가 영향을 미치는 곳이 MySQL 서버 전체(Global) 인지, 서버와 클라이언트 간 커넥션만 인지 등.
Dynamic 시스템 변수가 동적인지 정적인지 구분하는 변수

글로벌 변수

글로벌 범위의 시스템 변수는 하나의 MySQL 서버 인스턴스에서 전체적으로 영향을 미치는 시스템 변수를 의미한다.

주로 MySQL 서버 자체에 관련된 설정일 때가 많다.

예) innodb_buffer_poll_size, key_buffer_size

세션 변수

세션 범위의 시스템 변수는 MySQL 클라이언트가 MySQL 서버에 접속할 때 기본으로 부여하는 옵션의 기본값을 제어하는데 사용된다.

기본 값은 글로벌 시스템 변수이며, 각 클라이언트가 가지는 값이 세션 시스템 변수이다.

한번 연결된 커넥션의 세션 변수는 서버에서 강제로 변경할 수 없다.

예) autocommit

 

#Reference

백은빈 & 이성욱. 2021. Real MySQL 8.0 (1 ,전면 개정판). 위키북스. 

반응형

'Database > MySQL' 카테고리의 다른 글

[Database] MySQL 아키텍쳐  (0) 2022.01.09
[MariaDB] 계정 생성  (0) 2021.02.07
[MariaDB] 데이터베이스 생성  (0) 2021.02.07
Comments