DB

[RealMySQL 8.0] 역사 & 설정

bill's tech log 2025. 7. 8. 09:38

역사

MySQL은 1979년 스웨던의 TcX사의 터미널 인터페이스 라이브러리인 UNIREG로 부터 시작되었고, UNIREG라는 라이브러리가 1994년 웹 시스템의 테이터베이스로 사용하기 시작하면서 MySQL 1.0 버전이 완성되어 사내에서 사용되다 1996년 최초로 공개되었다.

 

2000년대에 TcX사에서 MySQL을 개발한 몬티와 데이빗이 MySQL AB라는 회사로 독립하여, FPL(Free Public License)정책으로 바꾸고 2006년 최종적으로 엔터프라이즈(별도의 라이선스 계약이 필요하며 추가 기능 및 지원을 제공), 커뮤니티(별도의 라이스선 계약없이 일반 사용자가 내려받아 사용하는 버전) 정책을 취하게 되었다.

 

MySQL은 개인 및 기업 사용자가 웹 애플리케이션을 위한 강력 하면서 비용 효율적인 데이터베이스 솔루션을 필요로 하는 시기에 탄생하였다. 초기 MySQL을 개발한 MySQL AB 사는 속도와 효율성을 최대화 하면서 사용 용이성을 제공하는 것을 목적으로 두었다.

 

이후 MySQL AB사는 썬 마이크로시스템즈에 인수되고, 다시 오라클로 인수됐으나, 특별한 라이센스 정책 변화는 없었고 MySQL 5.5 버전부터 5.7 버전까지 안정성과 성능 개선에 집중을 하였으며, 8.0 버전부터 상용 DBMS가 가지고 있는 기능들이 장착되기 시작하였다. 

 

버전  

  • 버전 선택가이드 
    • MySQL 서버의 버전 선택시 최신 버전을 설치하는것이 좋음. 
    • 기존 버전에서 새로운 메이저 버전으로 업그레이드 하는 경우 최소 패치 버전이 15 ~ 20번 이상 릴리스된 버전을 선택하는 것이 서비스 안정화에 도움이 됨. 
      • MySQL 버전이 8.0일 경우 MySQL 8.0.15 ~ 8.0.20 사이의 버전부터 시작하는것을 권장. 
      • 단, 갓 출시된 메이저 버전 선택은 삼가하는게 좋음.
  • 엔터프라이즈 VS 커뮤니티 에디션의 차이
    • 5.5 버전 이전에는 기술지원에 차이만 있었으나, 이후에는 소스코드도 달라졌고 엔터프라이즈의 소스코드는 비공개로 처리됨.
    • 5.5이후 부가적인 기능들 및 서비스들을 지원. ( 상세 내용은 추후 각 파트에서 정리 예정 )
      • Thread Pool
      • Enterprise Audit
      • Enterprise TDE
      • Enterprise Authentication
      • Enterprise Firewall
      • Enterprise Monitor
      • Enterprise Backup 
      • MySQL 기술 지원 

 

MySQL 서버의 시작과 종료 

각 OS에 맞춰서 CLI로 MySQL 서버를 설치를 완료하면 systemctl 유틸리티를 사용하여 MySQL을 가동하거나 종료하는것이 가능하다. ( 유닉스 계열에서만, 윈도우는 별도로 등록을 시켜야함 )

 

!아래와 같이 systemctl 커맨드로 MySQL 서버의 시작 종료 상태 값등을 확인할 수 있음. 

# start mysql server
$sytstemctl start mysqld

# check mysql server status 
$systemctl status mysqld

# stop mysql server 
$systemctl stop mysqld

# shutdown 권한이 있을 경우 systemctl이 아니라 직접 MySQL 서버에 접속해서 shutdown 가능 
mysql > SHUTDOWN;

 

 

 

MySQL 서버 연결 테스트 

3가지 방식을 통해서 MySQL 서버에 접속할 수 있다. 

#MySQL 소켓 파일을 통한 접속 
$mysql -u root -p --host=localhost --socket=/tmp/mysql.sock

#TCP/IP를 통해 접속 ( 원격 호스트에 접속시 반드시 TCP/IP 기반으로 접근이 필요 ) 
$mysql -u root -p --host=127.0.0.1 --port=3306

#별도의 호스트 주소와 포트를 명시하지 않는 접속 
$mysql -u root -p

 

 

위와 같은 방식으로 접근 완료 후 SHOW DATABASE 명령어를 통해서 데이터베이스 목록을 확인할 수 있다. 위와 같은 방식이 아니라 Telnet이나 Netcat 와 같은 프로그램을 통해서도 MySQL 서버의 접속 테스트를 해볼 수 있다. 

 

 

MySQL 시스템 변수 

MySQL 서버가 시작되면 설정파일의 내용을 읽어 메모리나 작동 방식으 초기화하고 접속된 사용자 제어를 위하여 특정한 값들을 저장하는데 이를 시스템 변수라고 한다.  아래와 같은 명령어로 확인할 수 있다. 

SHOW GLOBAL VARIABLES;

 

시스템 변수값이 MySQL 서버 및 클라이언트에 영향을 미치는지 판단하기 위해서 각 변수가 글로벌 변수인지 세션 변수인지 구분할 수 있어야한다. 또한 시스템 변수가 가지는 속성값이 있는데 각 속성값에 대해서 정리하면 아래와 같다. 

  • Cmd-Line: MySQL 서버의 명령행 인자로 설정될 수 있는지 여부를 나타내는 지표로 해당 값이 'YES'로 되어있으면 명령행 인자로 이 시스템 변수의 값을 변경하는것이 가능하다는 의미로 통함.
  • Option file: MySQL의 설정 파일인 my.cnf로 제어할 수 있는지 여부를 나타내는 지표로 옵션 파일이나 설정 파일 똔느 컨피규레이션 파일 등은 전부 my.cnf 파일을 지칭하는 것으로 같은 의미로 사용된다. 
  • System Var: 시스템 변수인지 아닌지를 나타내는 지표로 사용된다. 
  • Var Scope: 시스템 변수의 적용 범위를 나타내는 지표로 해당 시스템 변수가 영향을 미치는 곳이 MySQL 서버 전체를 대상으로 하는지 MySQL 서버와 클라이언트 간의 커넥션만인지 구분하는 용도로 구분하는 옵션값이다. 서버 전체를 대상으로 할 경우 Global, 세션대상은 Session, 세션과 글로벌 범위에 모두 적용(Both)로 처리되기도 한다. 
  • Dynamic: 시스템 변수가 동적인지 정적인지 구분하는 변수이다. 

글로벌 변수와 세션 변수 

글로벌 변수 :

  • 서버 전체에 적용되는 변수
  • 모든 사용자 세션이 동일하게 영향 받음
  • 일반적으로 SET GLOBAL 명령으로 변경
  • 변경은 즉시 적용되지만 서버 재시작 시 초기화
  • SET PERSIST를 이용해 지속 가능
  • 예시 
SHOW GLOBAL VARIABLES LIKE 'max_connections';

SET GLOBAL max_connections = 300;

 

 

세션 변수 :

  • 특정 사용자의 현재 연결 세션에만 적용
  • 다른 사용자나 세션에는 영향을 주지 않음
  • SET SESSION 또는 단순 SET으로 변경 가능
  • 세션 종료 시 사라짐 (휘발성)
  • 기본값은 글로벌 변수를 따름
  • 예시
SHOW SESSION VARIABLES LIKE 'sql_mode';

SET SESSION sql_mode = 'STRICT_ALL_TABLES';

정적 변수와 동적 변수 

정적 변수 :

  • 서버 시작 시에만 설정 가능
  • 서버 실행 중에는 변경 불가
  • 변경하려면 my.cnf 수정 후 서버 재시작

 

 

동적 변수 :

  • 서버 실행 중에도 SET 명령으로 변경 가능
  • 글로벌 또는 세션 단위로 변경 가능
  • 일부는 SET PERSIST로 영구 저장도 가능
    • SET 명령어로만 구동중인 MySQL 서버에서 반영을 하고, 서버를 재시작하면 반영이 안되기 때문에, SET PERSIST 명령어로 처리해야됨. MySQL 8.0 버전 이상 부터 지원.

 

참고문헌

 

Real MySQL 8.0 (1권) | 백은빈 - 교보문고

Real MySQL 8.0 (1권) | MySQL 서버를 활용하는 프로젝트에 꼭 필요한 경험과 지식을 담았습니다!《Real MySQL 8.0》은 《Real MySQL》을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0의 GTID와 InnoDB 클러스

product.kyobobook.co.kr

 

'DB' 카테고리의 다른 글

[RealMySQL8.0] 아키텍쳐  (2) 2025.07.28
[RealMySQL8.0] 사용자 및 권한  (0) 2025.07.09
[RealMySQL 8.0] Intro  (0) 2025.07.02
[TypeORM] cross-env 환경에서 마이그레이션 하기  (0) 2025.04.13
[DB] 뷰(View) 란?  (0) 2024.05.09