- Today
- Total
개발하는 고라니
[Database] MySQL 설치 및 설정 본문
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 |