MySQL 5.7 ZIP 아카이브를 이용한 Windows 환경 설치 가이드

Windows에서 MySQL 5.7 ZIP 설치의 이점

윈도우 환경에서 MySQL 데이터베이스를 설치하는 방법은 다양하지만, ZIP 아카이브를 활용한 설치는 특히 다음과 같은 상황에서 유용합니다.
  • 특정 버전의 MySQL을 여러 개 운용해야 할 때 (예: MySQL 5.7과 8.0을 동시에 사용).
  • 시스템 전체 PATH 환경 변수에 영향을 주지 않고 특정 디렉터리에 MySQL을 유연하게 설치하고자 할 때.
  • 이미 다른 MySQL 인스턴스가 설치되어 있는 경우, 충돌 없이 새로운 인스턴스를 추가할 필요가 있을 때.
이 가이드에서는 MySQL 5.7 ZIP 아카이브를 다운로드하고, 필요한 설정을 진행하며, Windows 서비스로 등록하는 과정을 상세히 설명합니다.

1. MySQL ZIP 아카이브 다운로드

MySQL 공식 웹사이트의 커뮤니티 아카이브 섹션에서 MySQL 5.7 버전의 Windows용 ZIP 파일을 다운로드합니다. 일반적으로 `Windows (x86, 64-bit), ZIP Archive` 버전을 선택합니다.

MySQL 커뮤니티 아카이브 다운로드 페이지

다운로드한 파일(예: mysql-5.7.37-winx64.zip)을 원하는 설치 경로(예: C:\Program Files\MySQL\mysql-5.7.37)에 압축 해제합니다. 이 경로는 이후 설정에서 계속 사용되므로 신중하게 선택하고 기억해야 합니다.

2. `my.ini` 설정 파일 및 `data` 디렉터리 생성

압축 해제된 MySQL 루트 디렉터리(예: C:\Program Files\MySQL\mysql-5.7.37) 안에 `my.ini` 파일을 새로 생성합니다. 이 파일은 MySQL 서버의 주요 동작을 정의하는 설정 파일입니다. 또한, 같은 경로에 데이터베이스 파일이 저장될 `data` 디렉터리를 생성합니다.
[mysql]
# MySQL 클라이언트의 기본 문자셋을 UTF-8로 설정
default-character-set=utf8 
 
[mysqld]
#skip-grant-tables # 초기 설정 후 root 비밀번호 변경 시 임시로 사용
# 이 MySQL 인스턴스가 사용할 포트 번호 설정 (기존 MySQL과 충돌 방지)
port = 3310

# SQL 모드 설정: 데이터 무결성 및 엄격한 규칙 적용
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

# MySQL 설치 디렉터리 경로 (본인의 압축 해제 경로로 수정)
basedir=C:\Program Files\MySQL\mysql-5.7.37
 
# MySQL 데이터 파일 저장 디렉터리 경로 (본인의 경로로 수정)
datadir=C:\Program Files\MySQL\mysql-5.7.37\data
 
# 서버의 최대 동시 연결 수
max_connections=200
 
# 서버의 기본 문자셋을 UTF-8로 설정
character-set-server=utf8
 
# 새로운 테이블 생성 시 기본 스토리지 엔진 설정
default-storage-engine=INNODB

3. MySQL 데이터베이스 초기화

관리자 권한으로 명령 프롬프트를 실행합니다. MySQL 설치 디렉터리 내의 `bin` 폴더로 이동합니다. (예: cd "C:\Program Files\MySQL\mysql-5.7.37\bin").

다음 명령어를 실행하여 데이터베이스를 초기화합니다. 이 과정에서 `data` 디렉터리에 MySQL 시스템 데이터베이스 파일들이 생성되며, 임시 `root` 비밀번호가 생성되어 콘솔에 출력됩니다. 이 임시 비밀번호는 반드시 기록해 두어야 합니다.

mysqld --initialize --console

초기화가 성공적으로 완료되면, `data` 폴더 내에 시스템 데이터베이스 파일들이 생성된 것을 확인할 수 있습니다.

4. MySQL 서비스 설치

MySQL을 Windows 서비스로 등록하여 시스템 시작 시 자동으로 시작되도록 설정합니다. MySQL 설치 디렉터리(예: C:\Program Files\MySQL\mysql-5.7.37) 안에 install_mysql_service.bat 파일을 생성하고 다음 내용을 입력합니다.

주의: MYSQLD_EXE_PATH, MYSQL_SERVICE_NAME, MY_INI_PATH 변수 값을 본인의 설치 경로와 원하는 서비스 이름으로 정확히 수정해야 합니다.

@echo off
:: MySQL 서버 실행 파일 경로
set MYSQLD_EXE_PATH="C:\Program Files\MySQL\mysql-5.7.37\bin\mysqld.exe"

:: 설치할 서비스 이름 설정 (시스템 내에서 고유해야 함)
set MYSQL_SERVICE_NAME="MySQLService57"

:: my.ini 설정 파일 경로
set MY_INI_PATH="C:\Program Files\MySQL\mysql-5.7.37\my.ini"

:: 서비스 설치 명령어 실행
"%MYSQLD_EXE_PATH%" --install %MYSQL_SERVICE_NAME% --defaults-file=%MY_INI_PATH%

if %ERRORLEVEL% NEQ 0 (
    echo 서비스 설치에 실패했습니다. 관리자 권한으로 실행했는지 확인하십시오.
) else (
    echo 서비스 '%MYSQL_SERVICE_NAME%' 이(가) 성공적으로 설치되었습니다.
    echo 이제 'net start %MYSQL_SERVICE_NAME%' 명령으로 서비스를 시작할 수 있습니다.
)
pause

생성한 install_mysql_service.bat 파일을 관리자 권한으로 실행합니다. 서비스 설치가 완료되면, Windows 서비스 관리자(services.msc)에서 `MySQLService57` (또는 지정한 서비스 이름)이라는 이름의 새 서비스가 등록된 것을 확인할 수 있습니다. 서비스를 시작하려면 net start MySQLService57 명령을 사용하거나 서비스 관리자에서 수동으로 시작합니다.

5. `root` 사용자 비밀번호 설정 및 권한 조정

초기화 시 생성된 임시 비밀번호를 변경하고, `root` 사용자의 접근 권한을 설정합니다.

5.1 임시 비밀번호 우회 설정

`my.ini` 파일을 열어 `[mysqld]` 섹션 아래에 `skip-grant-tables` 라인을 추가합니다. 이 설정은 비밀번호 없이 MySQL에 접속할 수 있도록 해줍니다.
[mysqld]
skip-grant-tables
# ... 나머지 설정 ...

이 설정을 적용하려면 MySQL 서비스를 재시작해야 합니다. 명령 프롬프트에서 `net stop MySQLService57`을 실행한 후 `net start MySQLService57`을 실행합니다.

5.2 MySQL 접속 및 비밀번호 변경

관리자 권한의 명령 프롬프트에서 `bin` 디렉터리로 이동한 후, 비밀번호 없이 MySQL에 접속합니다 (이때 `skip-grant-tables`가 활성화되어 있어야 합니다).

mysql -u root -P 3310

접속 후 다음 SQL 명령어를 순서대로 실행하여 `root` 비밀번호를 변경하고, 비밀번호 만료 정책을 해제합니다. 새 비밀번호로 MyNewSecurePass!를 사용합니다. 본인의 새 비밀번호로 교체하십시오.

-- mysql 데이터베이스 사용
USE mysql; 

-- root 사용자의 비밀번호를 'MyNewSecurePass!'로 변경
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewSecurePass!';

-- 비밀번호 만료 정책 해제 (필요시, 비밀번호를 영원히 사용하도록 설정)
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

-- 권한 변경사항 적용
FLUSH PRIVILEGES;

-- MySQL 세션 종료
QUIT;

참고: MySQL 5.7.6 버전부터는 `SET PASSWORD` 대신 `ALTER USER ... IDENTIFIED BY`를 사용하는 것이 권장됩니다.

5.3 `skip-grant-tables` 제거 및 서비스 재시작

`my.ini` 파일에서 `skip-grant-tables` 라인을 제거하거나 주석 처리합니다. 이 설정을 남겨두면 보안에 취약하므로 반드시 제거해야 합니다.

설정 변경 후 MySQL 서비스를 다시 재시작합니다 (net stop MySQLService57net start MySQLService57).

5.4 `root` 사용자 외부 접속 권한 설정

이제 새 비밀번호로 MySQL에 접속하여 `root` 사용자가 모든 호스트(`%`)에서 접속할 수 있도록 권한을 변경합니다. (외부 접속이 필요 없는 경우 이 단계는 건너뛸 수 있습니다.)

mysql -u root -pMyNewSecurePass! -P 3310

접속 후 다음 SQL 명령어를 실행합니다.

USE mysql;

-- 현재 root 사용자의 호스트 정보 확인
SELECT host, user FROM user WHERE user = 'root';

-- 'root' 사용자가 'localhost'에서만 접속 가능하도록 되어 있다면, '%'로 변경하여 모든 호스트에서 접속 가능하게 설정
UPDATE user SET host = '%' WHERE user = 'root' AND host = 'localhost';

-- 권한 변경사항 적용
FLUSH PRIVILEGES;

-- 변경된 호스트 정보 확인
SELECT host, user FROM user WHERE user = 'root';

QUIT;

이제 `root` 사용자는 지정한 포트(`3310`)와 `MyNewSecurePass!`를 사용하여 로컬 또는 원격에서 MySQL 서버에 접속할 수 있습니다.

태그: MySQL Windows database installation ZIP Installation MySQL 5.7

7월 18일 21:37에 게시됨