🥞 BE
home

02. 설치와 설정

2.1 MySQL 설치

dmg 파일 설치
homebrew를 활용하여 설치
결국 자잘한 오류가 계속 나서 Docker 환경에서 CentOS7 받아서 리눅스 환경에서 실행.
docker run -d --privileged --name mysql8.0 centos:centos8 /sbin/init
Shell
복사
systemctl 사용을 위해 —-privileged 옵션
각 운영체제의 버전에 맞는 RPM파일 다운로드.
rpm -Uvh https://repo.mysql.com/mysql80-community-release-el8-6.noarch.rpm
Shell
복사
dnf repolist enabled | grep "mysql.*-community.*"
Shell
복사
아래 코드로 설치 가능한 소프트웨어 목록을 확인 가능하다.
dnf --showduplicates list | grep mysql-community-server
Shell
복사
MySQL 서버 설치
Default 패키지의 mysql이 남아있으면 추가한 repository의 mysql community server가 설치 되지 않다.
Linux의 기본 패키지에 포함되어 있는 mysql 패키지를 disable하는 명령어를 실행
dnf module disable mysql
Shell
복사
dnf install mysql-community-server-8.0.35
Shell
복사
MySQL 서버 설정
tail -5 /etc/my.cnf
Shell
복사
MySQL 서버 초기화
mysqld --defaults-file=/etc/my.cnf --initialize-insecure
Shell
복사
위 명령어를 실행하게 되면, MySQL 서버와 엔진이 초기화작업을 하며 파일이 만들어지고 root 계정이 생성된다.
맨 마지막의 -insecure 옵션을 추가하게 되면, 초기에 root 계정의 비밀번호를 없음으로 설정하는 것.
서버 권한 변경
서버의 실행전에 mysql로부터 여러 데이터 파일을 작성할 수 있도록, 파일의대한 권한을 줘야할 필요가 있다.
chown -R mysql:mysql /var/lib/mysql
Shell
복사
서버 실행 및 상태 확인
systemctl start mysqld systemctl status mysqld
Shell
복사

2.2 서버 연결 테스트

아래 코드는 MySQL 소켓 파일을 이용해 접속하는 예제다. 이외에도
1.
TCP/IP를 통해 127.0.0.1(로컬 호스트)로 접속
mysql -uroot -p --host=127.0.0.1 --port=3306
2.
기본값으로 접속
mysql -uroot -p

2.3 서버 설정

일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 리눅스를 포함한 유닉스 계열에서는 my.cnf라는 이름을 사용하고, 윈도우 계열에서는 my.ini라는 이름을 사용한다. MySQL 서버는 지정된 여러 개의 디렉터리를 순차적으로 탐색하면서 처음 발견된 my.cnf 파일을 사용하게 된다.
만약 설치된 MySQL 서버가 어느 디렉터리에서 my.cnf 파일을 읽는지 궁금하다면 다음과 같이 mysqld 프로그램을 --verbose --help 옵션을 주어 실행해보면 된다.
위의 경우에는 다음과 같은 순서로 파일을 찾고 있다.
1.
/etc/my.cnf 파일
2.
/etc/mysql/my.cnf 파일
3.
/opt/homebrew/etc/my.cnf 파일
4.
~/.my.cnf 파일
MySQL 설정 파일은 하나의 my.cnf나 my.ini 파일에 여러 개의 설정 그룹을 담을 수 있으면, 대체로 실행 프로그램 이름을 그룹명으로 사용한다.

2.4 MySQL 시스템 변수

SHOW GLOBAL VARIABLES 명령으로 확인이 가능하다.
MySQL 서버의 매뉴얼에서 시스템 변수를 설명한 페이지를 보면, MySQL 서버에서 제공하는 모든 시스템 변수의 목록과 간단한 설명을 참고할 수 있다.
시스템 변수가 가지는 5가지 속성은 다음과 같다.
1.
Cmd-Line : MySQL 서버의 명령행 인자로 설정될 수 있는지 여부를 나타낸다. 즉, 이 값이 "Yes"이면 명령행 인자로 이 시스템 변수의 값을 변경하는 것이 가능하다는 의미이다.
2.
Option File : MySQL의 설정 파일인 my.cnf(또는 my.ini)로 제어할 수 있는지 여부를 나타낸다. 옵션 파일이나 설정 파일 또는 킨피규레이션 파일 등은 전부 my.cnf(or my.ini)파일을 지칭하는 것으로 같은 의미로 사용된다.
3.
System Var : 시스템 변수인지 아닌지를 나타낸다. MySQL 서버의 설정 파일을 작성할 때 각 변수명에 사용된 하이픈('-')이나 언더스코어('_')의 구분에 주의해야 한다. 이는 MySQL 서버가 예전부터 수많은 사람들의 손을 거쳐오면서 생긴 일관성 없는 변수의 명명 규칙 때문이다. 어떤 변수는 하이픈으로 구분되고 어떤 시스템 변수는 언더스코어로 구분되는 등 상당히 애매모호한 부분이 있는데, 뒤늦게 이런 부분을 언더스코어로 통일해가는 중이다. 현재 MySQL 8.0에서는 모든 시스템 변수들이 '_'를 구분자로 사용하도록 변경된 것으로 보인다. 그리고 명령행 옵션으로만 사용 가능한 설정들은 '_'가 아니라 '-'을 구분자로 사용한다.
4.
Var Scope : 시스템 변수의 적용 범위를 나타낸다. 이 시스템 변수가 영향을 미치는 곳이 MySQL 서버 전체(Global)를 대상으로 하는지, 아니면 MySQL 서버와 클라이언트 간의 커넥션(Session)만인지 구분한다. 그리고 어떤 변수는 세션과 글로벌 범위에 모두 적용(Both)되기도 한다.
5.
Dynamic : 시스템 변수가 동적인지 정적인지 구분하는 변수이다.
→ Var Scope : 시스템 변수는 적용 범위에 따라 글로벌 변수와 세션 변수로 구분된다.
→ Dynamic : 시스템 변수는 MySQL 서버가 기동 중인 상태에서 변경 가능한지에 따라 동적 변수와 정적 변수로 구분된다.

Reference