MySQL 버전 선택 가이드
패치 버전이 15~20번 이상 릴리스된 버전을 골라야합니다.
ex) MySQL8.0
버전이면 MySQL8.0.15
이상
기본 디렉토리
/usr/local/mysql
디렉토리 | 설명 |
---|---|
bin | MySQL 서버와 클라이언트, 유틸리티용 |
data | 로그, 데이터 파일 |
inclue | C/C++ 헤더 파일 |
lib | 라이브러리 파일 |
share | 다양한 지원 파일, 에러 메시지, 샘플 설정 파일 |
관련 파일
파일명 | 설명 |
---|---|
/etc/my.cnf | MySQL 실행에 필요한 3~4가지 기본 설정 포함 |
/var/log/mysqld.log | 에러 로그 파일 |
/tmp/mysql.sock | MySQL 소켓 파일 |
MySQL 설정 파일로 설치를 진행합니다.
터미널에서 mysqld --initialize-insecure 명령어를 실행합니다.
mysqld --defaults-file=/etc/my.cnf --initialize-insecure
systemctl
유틸리티로 MySQL 서버를 시작 / 종료 합니다.
시작
systemctl start mysqld
종료
systemctl stop mysqld
mysqld_safe
스크립트로 서버를 시작 / 종료 할 수도 있습니다.
my.cnf의 "[mysqld_safe]" 섹션 설정에 기반해 MySQL 서버를 시작합니다.
MySQL 서버를 셧다운하고 싶다면 다음과 같이 입력합니다.
mysql> SHUTDOWN;
클린 셧다운 (Clean shutdown)
MySQL 서버가 종료될 때 모든 커밋된 데이터를 파일에 적용한 뒤 종료하는 것을 말합니다.
mysql> SET GLOBAL innodb_fast_shutdown=0;
linux> systemctl stop mysqld.service
mysql> SET GLOBAL innodb_fast_shutdown=0;
mysql> SHUTDOWN;
Host가 localhost일 때
mysql -uroot -p --host=localhost --socket=/tmp/mysql.sock
원격 호스트에 있는 MySQL 서버에 접속할 때
mysql -uroot -p --host=127.0.0.1 --port=3306
Host와 Port를 명시하지 않습니다.
* 기본 값은 `--host=localhost` 이며, 소켓 파일을 사용합니다.
* MySQL 서버 설정 파일에서 소켓 파일을 읽어옵니다.
* 유닉스 소켓 파일은 MySQL 서버가 켜질 때 만들어집니다.
```bash
mysql -uroot -p
```
Telnet 프로그램으로 확인하는 방법
telnet 호스트 포트
Netcat 프로그램으로 확인하는 방법
nc 호스트 포트
⇒ 서버가 메시지를 출력한다면 네트워크 연결 상태는 정상입니다.
장점
단점
5.5
→ 5.7
→ 8.0
(5.7
버전을 건너뛸 수 없습니다.)장점
단점
주의 항목 | 설명 |
---|---|
사용자 인증 방식 | 5.0 : Native Authentication8.0 : Caching SHA-2 Authentication인증 방식 유지 옵션 (--default-authentication-plugin=mysql_native_password) |
호환성 | 업그레이드 전 mysqlcheck로 호환성 체크를 진행하세요. (손상된 FRM 파일, 데이터 타입 또는 함수의 호환 여부 확인) |
외래키명 길이 | 8.0 부터는 외래키명 길이 제한이 64글자로 줄어듭니다.긴 외래키명이 있는지 확인하고 수정하세요. |
인덱스 힌트 | 8.0 부터는 인덱스 힌트가 성능 저하를 유발할 수 있으니 꼭 확인하세요. |
Group by 정렬 옵션 | 8.0 부터는 GROUP BY절에 ASC, DESC 를 써도 정렬되지 않습니다. |
파티션 테이블스페이스 | 8.0 부터는 파티션의 테이블스페이스를 개별 스페이스에 저장해야 합니다.공용 테이블스페이스에 저장할 수 없습니다. |
MySQL 5.7
→ 8.0
버전 업그레이드는 총 2단계에 걸쳐 진행됩니다.
1단계 : 데이터 딕셔너리 업그레이드를 진행합니다.
5.7
에서는 FRM 확장자로 저장됐었는데
8.0
에서는 InnoDB 테이블에 저장되도록 변경돼 트랜잭션이 적용됩니다.
2단계: MySQL 서버 업그레이드로 마무리합니다.
시스템 데이터베이스와
(performance_schema, information_schema, mysql)
테이블 구조가 8.0
버전에 맞게 변경됩니다.
MySQL SHUTDOWN
시키기
MySQL 5.7
삭제 후 → 8.0
설치
mysqld로 MySQL 8.0
서버 기동
서버 실행 시 데이터 딕셔너리가 자동 업데이트됩니다.
mysql_upgrade 유틸리티 실행
테이블 구조가 8.0에 맞게 변경됩니다.
MySQL SHUTDOWN
시키기
MySQL 5.7
삭제 후 → 8.0
설치
mysqld로 MySQL 8.0
서버 기동
서버 실행 시 데이터 딕셔너리뿐만 아니라
테이블 구조까지 자동으로 업데이트됩니다.
왜 이렇게 바뀐걸까요❓
유저들이 mysql_upgrade 유틸리티 실행을 자꾸 까먹어서 그냥 자동화했다고 합니다.
Windows에서는 my.ini 파일로 설정합니다.
# 설정 파일 참조 경로 확인 명령어
mysqld --verbose --help
위 명령어를 실행하면
아래와 같이 설정 파일 참조 순서에 따라 참조 경로를 출력합니다.
# 출력
...
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
...
LTR (Left to Right) 방향으로 참조가 일어납니다.
1, 2, 4번 경로는 고정적으로 동일합니다.
3번째 경로 /usr/etc/my.cnf
는 컴파일될 때 결정되므로, 사용자마다 달라질 수 있습니다.
위 요소들을 이용해
하나의 파일에 여러 개의 설정 그룹을 만들 수 있습니다.
[mysqld] # 설정 그룹
socket = /usr/local/mysql/tmp/mysql.sock
port = 3306
[mysql]
default-character-set = utf8mb4
socket = /usr/local/mysql/tmp/mysql.sock
port = 3304
[mysqldump]
default-character-set = utf8mb4
socket = /usr/local/mysql/tmp/mysql.sock
port = 3305
시스템 변수 확인 방법
SHOW GLOBAL VARIABLES;
시스템 변수 속성 목록표
속성명 | 설명 |
---|---|
Cmd-Line | 커맨드 라인으로 설정할 수 있는 옵션인지? |
Option File | my.cnf로 제어할 수 있는 옵션인지? |
System Var | 시스템 변수인지? |
Var Scope | 옵션의 영향 범위는 어디까지인지? Global, Session, Both |
Dynamic | 동적 시스템 변수인지? |
변수 스코프 상세 설명
글로벌 변수
한 대의 MySQL 서버 인스턴스 전체 범위에 영향을 미칩니다.
세션 변수
오직 현재 클라이언트의 커넥션에만 영향을 미칩니다.
Both
값 변경 시 범위를 명시해줘야 합니다.
정적 변수와 동적 변수 설명
수정 가능하면? 동적 변수
그렇지 않으면? 정적 변수 입니다.
my.cnf 변경은 서버를 재시작할 때까지 반영되지 않습니다.
MySQL 서버 메모리 상의 변수를 수정하면 즉각 반영됩니다.
🚨 단, 서버의 현재 인스턴스에만 적용되고 재시작 시 변경 사항이 날아갑니다.
변경사항을 반영하려면 SET PERSIST
명령을 이용해 my.cnf 파일에 기록해야합니다.
# 예시
SET GLOBAL max_sonnections=500; # 글로벌 시스템 변수 변경
SHOW GLOBAL VARIABLES LIKE '%max_connections%' # 변경된 값 조회
SET PERSIST max_connections=500; # 변경 사항을 my.cnf 파일에 반영