MySQL을 설치하고, 설정을 완료해보자
MySQL 다운로드 페이지
에서 RPM 설치 파일을 직접 받아 Yum
을 이용해야 한다.
yum install https://dev.mysql.com/get/mysql80-community-release-el9-5.noarch.rpm
제일 처음 것 Download
버튼을 누르고, 위 벨로그에 있던 것 처럼 링크 주소 복사
를 해주자! 그다음 터미널에서 실행!
ls -alh /etc/yum.repos.d/*mysql*
yum 리포지토리
가 등록되면 rpm 파일
들이 저장된 경로를 가진 파일들이 생성된 것을 확인할 수 있다.
yum 인스톨러 명령
을 통해 버전별로 설치 가능한 MySQL 목록을 확인해보자
sudo yum search mysql-community
#설치 가능한 모든 버전 확인
sudo yum --showduplicates list mysql-community-server
가장 최신 버전인 8.0.37
버전을 설치해보자!
sudo yum install mysql-community-server-8.0.37
MySQL 서버
를 실행하는 데 필요한 초기 데이터 파일(시스템 테이블이 저장되는 데이터 파일)
과 트랜잭션 로그(리두 로그)
파일을 생성
mysqld --defaults-file=/etc/my.cnf --initialize-insecure
# MySQL 서버 시작
systemctl start mysqld
# 서버 상태 확인
systemctl status mysqld
붙여넣기가 안되는게 너무 불편해서 putty
를 설치했다.
# 서버 실행 확인
ps -ef | grep mysqld
# MySQL 서버 종료
systemctl stop mysqld
실제 트랜잭션이 정상적으로 커밋
돼도 데이터 파일
에 변경된 내용이 아직 기록되지 않고, 로그 파일(리두 로그)
에만 기록돼 있을 수 있는데, 이는 비정상적인 상황은 아니다
# MySQL 서버 종료 시 모든 커밋된 내용을 데이터 파일에 기록하고 종료
SET GLOBAL innodb_fast_shutdown=0;
클린 셧다운
: 모든 커밋된 데이터를 데이터 파일
에 적용하고 종료하는 것
# 서버에 직접 접속
mysql -uroot -p
임시 비밀번호
가 있었다. 로그인 후 root 비밀번호를 바꿔주자..
--기본 생성된 데이터베이스 목록 확인
show databases;
인플레이스 업그레이드
: MySQL 서버의 데이터 파일
을 그대로 두고 업그레이드
=> 여러 가지 제약 사항이 있으나, 업그레이드 시간
을 크게 단축
논리적 업그레이드
: mysqldump 도구
등을 이용해 MySQL 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프
한 후, 새로 업그레이드된 버전의 MySQL 서버에서 덤프된 데이터 적재
하는 방법
=> 버전 간 제약 사항이 거의 없지만 업그레이드 시간 매우 많이 소요
메이저 버전 간 업그레이드
는 직전 메이저 버전
에서만 업그레이드 허용
=> ex. MySQL 5.1 버전 사용
중이라면 5.1->5.5로 업그레이드 후 5.6으로 업그레이드, 그 후 5.6->5.7로 업그레이드 한 후에 MySQL 8.0
으로 업그레이드 가능
# 어디서 my.cnf를 읽는지
mysqld --verbose --help
시스템 변수
: MySQL 서버가 기동하면서 설정 파일의 내용을 읽어 메모리
나 작동 방식
을 초기화
하고, 접속된 사용자 제어
를 위해 이러한 값
을 별도로 저장
해 둔 것
-- mysql의 시스템 변수 확인 (mysql 접속 후)
show global variables;
https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html
시스템 변수
값이 어떻게 MySQL 서버와 클라이언트에 영향을 미치는지 판단하려면, 각 변수가 글로벌 변수
인지 세션 변수
인지 구분해야 한다.
Cmd-Line
: MySQL 서버의 명령행 인자
로 설정될 수 있는지 여부
Option file
: MySQL의 설정 파일인 my.cnf
로 제어 가능한지 여부
System Var
: 시스템 변수
인지 아닌지 나타냄
Var Scope
: 시스템 변수 적용 범위
Dynamic
: 시스템 변수가 동적
인지 정적
인지 구분
글로벌 범위 시스템 변수
: 하나의 MySQL 서버 인스턴스에서 전체적으로 영향
을 미치는 시스템 변수
=> 주로 MySQL 서버 자체
에 관련된 설정
세션 범위의 시스템 변수
: MySQL 클라이언트
가 MySQL 서버
에 접속할 때 기본으로 부여하는 옵션의 기본값 제어
MySQL 서버의 시스템 변수는 MySQL 서버가 기동 중
인 상태에서 변경 가능한지
에 따라 동적 변수
와 정적 변수
로 구분된다.
-- 변경된 시스템 변수는 my.cnf파일이 아닌 별도의 파일에 기록됨
SET PERSIST
위 명령을 사용하면, 실행 중인 MySQL 서버
의 시스템 변수를 변경함과 동시에 자동으로 설정 파일
로도 기록한다.
변경하고자 하는 값이 동적 변수
라면, SET 명령
으로 간단히 변숫값을 변경하고, MySQL 서버
를 재시작하지 않아도 됨
=> Both
의 범위를 가진 시스템 변수라면, 글로벌 시스템 변수
값을 변경해도 세션 변수의 값
은 변경 안됨
동적 변수
의 경우 MySQL 서버
에서 SET GLOBAL
명령으로 변경하면, 즉시 서버에 반영되지만 설정 파일
에 변경된 내용이 적용되지 않으므로 해당 문제점을 보완하기 위해 SET PERSIST 명령
을 추가했다.
set persist max_connections=5000;
show global variables like 'max_connections';
set persist 명령
은 세션 변수
에 적용되지 않으며, set persist 명령
으로 시스템 변수를 변경하면 mysql 서버는 자동으로 global시스템 변수
의 변경으로 인식하고 변경
-- 현재 실행 중인 서버에는 변경 내용을 적용하지 않고, 다음 재시작을 위해 mysqld-auto.cnf 파일에만 변경 내용 기록시
set persist_only max_connections=5000;
정적인 변수의 값
을 영구적으로 변경
하고자 할 때도 사용 가능
정적인 변수
는 실행 중인 MySQL 서버
에서 변경할 수 없는데, MySQL 서버가 재시작 될 때만 변경 가능
하다.
-- mysqld-auto.cnf 파일 내용 삭제시
reset persist;
참조할 만한 기본 설정 파일
을 이용해 my.cnf
에 vi
명령어로 추가해주자