MySQL 개요 및 설치, 환경설정

1. MySQL 개요

  • 웹의 표준 RDBMS: 전 세계적으로 가장 인기 있는 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)
  • LAMP 스택의 주역:
    • Linux, Apache, MySQL, PHP/Python/Perl로 이어지는 현대 웹 아키텍처(LAMP 스택)의 핵심 구성 요소
    • 페이스북, 유튜브, 위키피디아 등 수많은 대형 서비스의 기초 자산이 되고 있음
  • 강력한 성능과 쉬운 사용성:
    • 빠르고 신뢰할 수 있으며 가벼워, 소규모 스타트업부터 대규모 기업까지 폭넓게 선택하는 최적의 도구
    • 다중 스레드, 다중 사용자 형식을 지원하며, 빠르고 유연하며 사용하기 쉬워 웹 애플리케이션 개발의 필수 도구로 자리 잡음
  • 주요 특징
구분주요 학습 항목상세 설명
정형화된 구조계층 구조 및 정규화 - 데이터베이스 - 테이블 - 행(Row) - 열(Column)로 이어지는 엄격한 구조를 가짐
- ERD 설계를 통해 데이터 중복을 최소화(정규화)하여 저장
강력한 스토리지 엔진플러그형 아키텍처 - 사용 목적에 따라 스토리지 엔진을 유연하게 교체할 수 있음
- 예: 데이터 무결성을 위한 InnoDB, 빠른 읽기를 위한 MyISAM
데이터 무결성트랜잭션 및 ACID - InnoDB 엔진을 기본으로 사용하여 트랜잭션(ACID 원칙)을 완벽하게 지원
- 대용량 데이터 처리 시에도 데이터 오류를 방지하고 신뢰성을 보장
오픈 소스 및 커뮤니티무료 및 빠른 문제 해결 - 커뮤니티 에디션은 누구나 무료로 사용할 수 있음
- 방대한 사용자 커뮤니티를 통해 문제 해결과 학습이 매우 빠름
호환성 및 확장성다양한 플랫폼 및 리플리케이션 - Windows, Linux, macOS 등 대부분의 플랫폼에서 구동됨
- 데이터베이스 복제(Replication) 기능을 통해 대량의 트래픽을 분산 처리
- 고가용성을 확보할 수 있음

2. MySQL 설치 가이드

  • 운영체제별 설치 방식이 상이함 🡲 사용 중인 환경에 맞춰 진행할 것

2.1 Windows 환경

  1. 설치 파일 다운로드:
  2. 설치 타입 선택:
    • 일반적인 개발 용도 🡲 ‘Developer Default’
    • 필요한 항목만 설치 🡲 ‘Custom’
  3. Check Requirements:
    • 필요한 Visual Studio Redistributable 등의 패키지가 없다면 설치를 진행
  4. Configuration (중요):
    • Type and Networking: ‘Development Computer’로 설정 (포트 번호는 기본값인 3306).
    • Authentication Method: 보안 강화를 위해 ‘Use Strong Password Encryption’을 권장
    • Accounts and Roles: Root 계정의 비밀번호를 설정 (반드시 기억할 것)

2.2 Linux (Ubuntu 기준) 환경

  • 터미널을 통해 빠르고 간편하게 설치할 수 있음
    • Mac OS도 유사함
      # 패키지 목록 업데이트
      sudo apt update
    
      # MySQL 서버 설치
      sudo apt install mysql-server
    
      # 설치 확인 및 서비스 상태 체크
      sudo systemctl status mysql
    

3. 환경 설정 및 보안 최적화

  • 설치 완료 후, 실제 사용을 위한 필수 설정 단계
  • 리눅스를 기준으로 설명 (타 OS는 내용을 참고해서 설정)

3.1 초기 보안 설정 (Linux 필수)

  • 설치 직후에는 비밀번호가 없거나 보안이 취약할 수 있음
  • sudo mysql_secure_installation
    • MySQL 설치 직후 데이터베이스의 보안을 강화하기 위해 반드시 수행해야 하는 초기 보안 설정 스크립트
    • 비밀번호 복잡도 설정, 익명 사용자 제거, 원격 접속 차단 여부 등을 차례로 선택
      sudo mysql_secure_installation
    
  • 단계별 설정 가이드 및 권장 사항

    • [1단계] VALIDATE PASSWORD COMPONENT (비밀번호 복잡도 검사 기능)
      • 질문: Would you like to setup VALIDATE PASSWORD component?
      • 선택 권장: Y (Yes)
      • 이유:
        • 외부 해킹 공격(무차별 대입 공격 등)으로부터 DB를 보호하기 위해 패스워드 정책을 활성화하는 것이 좋음
      • 추가 선택 (정책 수준): 0 (Low), 1 (MEDIUM), 2 (STRONG) 중 선택
      • 로컬 개발 환경: 0 (Low) 권장 (8자 이상이기만 하면 되므로 편하게 개발 가능)
      • 운영/배포 환경: 1 (Medium) 이상 권장 (숫자, 대소문자, 특수문자 포함 필수)
    • [2단계] Root 비밀번호 설정
      • 질문: New password: / Re-enter new password:
      • 설정: 관리자(root) 계정으로 사용할 강력한 비밀번호를 입력
      • 주의: 1단계에서 설정한 복잡도 기준에 맞지 않으면 통과되지 않고 다시 입력해야 함
    • [3단계] 익명 사용자 제거 (Anonymous Users)
      • 질문: Remove anonymous users?
      • 선택 권장: Y (Yes)
      • 이유:
        • MySQL은 기본적으로 로그인 없이 접속할 수 있는 익명 계정이 생성되어 있을 수 있음
        • 보안상 매우 위험하므로 무조건 제거해야 함
    • [4단계] Root 계정의 원격 접속 차단 (Disallow root login remotely)
      • 질문: Disallow root login remotely?
      • 선택 권장: Y (Yes)
      • 이유:
        • 최고 권한을 가진 root 계정이 외부 네트워크(원격)에서 바로 접속할 수 있게 두는 것은 해커들의 표적이 되기 쉬움
      • 실무 팁:
        • 원격 접속은 일반 사용자 계정을 따로 생성하여 권한을 부여
        • root는 오직 서버 내부(localhost)에서만 접근하도록 차단하는 것이 표준
    • [5단계] 테스트 데이터베이스 제거 (Test Database)
      • 질문: Remove test database and access to it?
      • 선택 권장: Y (Yes)
      • 이유:
        • 누구나 접근 가능한 기본 test 데이터베이스와 관련 권한을 제거 🡲 잠재적인 보안 취약점을 없앰
    • [6단계] 권한 테이블 테이블 반영 (Reload Privilege Tables)
      • 질문: Reload privilege tables now?
      • 선택 권장: Y (Yes)
      • 이유:
        • 지금까지 설정한 모든 보안 규칙(비밀번호 변경, 계정 및 DB 삭제 등)을 MySQL 서버에 즉시 적용(Flush)
  • 한눈에 보는 요약 테이블
단계주요 설정 내용권장 선택실무적 의의
1패스워드 복잡도 검사 활성화Y취약한 비밀번호 사용 강제 차단
2Root 비밀번호 설정입력관리자 계정 보안 강화
3익명 사용자(Anonymous) 제거Y인증되지 않은 사용자의 접근 원천 차단
4Root 계정 원격 로그인 차단Y외부 해킹 공격 표적 방지 (로컬 접속만 허용)
5기본 Test DB 삭제Y불필요한 기본 자산 및 권한 정리
6변경된 권한 적용 (Reload)Y설정을 재시작 없이 즉시 반영

3.2 시스템 환경 변수 설정

  • Windows 기준
    • 터미널(CMD/PowerShell)에서 mysql 명령어를 바로 사용하기 위해 필요함
    • 내 PC 우클릭 > 속성 > 고급 시스템 설정 > 환경 변수
    • System VariablesPath 항목을 편집하여 MySQL 설치 폴더의 bin 경로를 추가
      • 예: C:\Program Files\MySQL\MySQL Server 8.0\bin
  • Linux 기준
    • 터미널 어디서나 mysql 명령어를 바로 실행하기 위해 환경 변수(PATH) 설정을 진행
    • GUI 대신 텍스트 기반의 설정 파일(.bashrc 또는 .zshrc)을 수정하는 방식으로 등록
    1. MySQL 실행 파일(bin) 경로 확인
      • 보통 패키지 매니저(apt, yum)로 설치하면 자동으로 등록됨
      • 수동 설치했거나 경로를 명시해야 할 때 기본 경로는 다음과 같음
        • 일반적인 리눅스 기본 경로: /usr/bin/mysql 또는 /usr/local/mysql/bin
        • 참고: 터미널에 which mysql을 입력하면 현재 설치된 MySQL의 실행 파일 경로를 확인할 수 있음
    2. 환경 변수 등록 및 반영 단계
      • Linux에서는 사용자가 사용하는 쉘(Shell) 종류에 따라 설정 파일이 다름
      • 가장 보편적인 Bash 쉘을 기준으로 설명

        • [1단계] 설정 파일 열기
          • 사용자의 홈 디렉토리에 있는 .bashrc 파일을 텍스트 에디터(nano 또는 vi)로 엶

              nano ~/.bashrc
            
          • 만약 Mac 환경과 유사한 Zsh 쉘을 사용한다면 nano ~/.zshrc를 입력

        • [2단계] PATH 경로 추가
          • 파일의 가장 최하단으로 이동하여 아래 코드를 추가

              # MySQL PATH 설정
              export PATH=$PATH:/usr/bin/mysql
            
            • 기존 윈도우의 Path 뒤에 세미콜론(;)을 붙이듯, 리눅스는 콜론(:)으로 경로를 구분함
            • $PATH: 기존에 등록되어 있던 다른 환경 변수 경로들을 그대로 유지한다는 의미
            • :/usr/bin/mysql: 새로 추가할 MySQL의 bin 폴더 경로
        • [3단계] 변경 사항 적용 (★중요)
          • 설정 파일을 저장하고 나온 뒤,
          • 터미널을 껐다 켜지 않고 즉시 환경 변수를 반영하기 위해 아래 명령어를 실행
            • Windows에서 확인 버튼을 누르는 것과 같음
              source ~/.bashrc
            
  • 한눈에 보는 Windows vs Linux 비교 테이블
항목Windows (윈도우)Linux (리눅스)
설정 방식GUI (고급 시스템 설정 🡲 환경 변수)CLI (터미널에서 설정 파일 편집)
대상 파일/위치시스템 속성의 `Path` 변수홈 디렉토리의 `~/.bashrc` 또는 `~/.zshrc`
경로 구분자세미콜론 (`;`)콜론 (`:`)
적용 명령어(보통 터미널 재시작 필요)`source ~/.bashrc` (즉시 반영)
확인 명령어`echo %PATH%``echo $PATH`
  • 활용 팁
    • 리눅스 환경에 익숙하지 않은 경우,
      • source 명령어를 빼먹어서 “환경 변수를 추가했는데도 command not found가 떠요!”라고 질문하는 경우가 많음
      • 환경 변수 수정 후에는 반드시 source 명령어로 동기화를 하거나 터미널 세션을 재연결해야 함

3.3 원격 접속 허용 설정

  • 기본적으로 MySQL은 로컬 접속만 허용함
  • 외부 개발 도구(DBeaver, Workbench 등)나 응용 프로그램 서버에서 Linux에 설치된 MySQL에 접근하려면 🡲 아래의 3단계 설정을 순서대로 수행

  • [1단계] MySQL 설정 파일 수정 (IP 바인딩 해제)
    • 터미널에서 텍스트 에디터(vi 또는 nano)를 사용하여 MySQL 환경 설정 파일열기
    • 설정 파일 변경은 시스템 권한이 필요하므로 반드시 sudo 명령어를 앞에 붙여야 함

    • 설정 파일 열기 명령어:

        sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
      
      • CentOS/RHEL 계열의 경우 주로 /etc/my.cnf 또는 /etc/my.cnf.d/ 경로에 위치함
    • 수정 사항:
      • 파일 내부에서 bind-address 항목을 찾아 아래와 같이 변경

          # 기존 설정 (로컬 접속만 허용)
          bind-address = 127.0.0.1
        
          # 변경 후 설정 (모든 IP로부터의 원격 접속 허용)
          bind-address = 0.0.0.0
        
        • 만약 mysqlx-bind-address = 127.0.0.1 설정이 있다면 역시 0.0.0.0으로 수정할 것을 권장함
    • 의미:
      • 127.0.0.1은 서버 자신만 접속할 수 있는 루프백 IP
      • 이를 0.0.0.0으로 변경하면 서버가 가진 모든 네트워크 인터페이스를 열어 외부 접속을 받아들이겠다는 의미
  • [2단계] Linux 방화벽 개방 및 MySQL 서비스 재시작
    • 설정 파일을 바꿨더라도 리눅스 자체 방화벽이 차단하고 있다면 외부에서 접속할 수 없음
    • 또한, 설정 파일의 변경 사항을 적용하기 위해 MySQL 서비스를 재시작해야 함

      • MySQL 서비스 재시작:

          sudo systemctl restart mysql
        
      • 리눅스 방화벽(UFW)에서 MySQL 포트(3306) 개방:

          sudo ufw allow 3306/tcp
          sudo ufw reload
        
      • CentOS의 경우: sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent 후 reload

  • [3단계] 외부 접속용 사용자 생성 및 권한 부여
    • 설정과 방화벽이 해결되었다면,
    • MySQL 내부로 접속(mysql -u root -p)하여 어떤 IP에 대해서도(%) 접속할 수 있는 전용 계정을 만들고 권한을 부여

        -- 1. 모든 IP('%')에서 접속 가능한 사용자 생성
        CREATE USER 'username'@'%' IDENTIFIED BY 'password';
      
        -- 2. 해당 사용자에게 모든 데이터베이스(*.*)에 대한 권한 부여
        GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
      
        -- 3. 변경된 권한 설정 즉시 반영
        FLUSH PRIVILEGES;
      
      • mysql -u root -p를 실행했을때, 비밀번호를 물어보고 비밀번호가 틀렸다고 한다면?
        • sudo mysql -u root -p를 실행할 것
        • MySQL 8.0부터는 고정된 ‘기본 초기 비밀번호(예: 1234, 없음 등)’가 존재하지 않음
  • 활용 팁
    • 외부 접속 오류가 날 때 원인을 단계별로 찾는 체크리스트를 장표에 넣어주면 좋음
      1. bind-address를 안 바꿨는가? 🡲 MySQL 설정 문제
      2. systemctl restart를 안 했는가? 🡲 서비스 미반영 문제
      3. 리눅스 3306 포트를 안 열었는가? 🡲 방화벽 문제
      4. 계정 생성 시 @'localhost'로 만들었는가? 🡲 MySQL 권한 문제

4. 접속 테스트 및 확인

  • 설정이 모두 끝났다면 터미널에서 접속을 시도하여 정상 작동을 확인

      # root 계정으로 접속
      mysql -u root -p
    
  • 비밀번호 입력 후 mysql> 프롬프트가 나타나면 성공

  • 관리 도구 추천
    • 텍스트 기반의 CLI가 불편하다면 아래와 같은 GUI 도구를 함께 사용
      • MySQL Workbench: 공식 관리 도구. 모델링부터 쿼리 작성까지 지원
      • DBeaver: 다양한 DB를 한꺼번에 관리할 수 있는 오픈 소스 도구
      • HeidiSQL: 가볍고 빠른 Windows 전용 관리 도구

© 2020. AiDALab Co. All rights reserved.

Powered by Hydejack v9.2.1