[인프라진단] MySQL 설치와 실습 환경 준비 - Ubuntu에서 시작하기
1. 이번에 만드는 실습 환경
이번 글에서는 Ubuntu에 MySQL을 설치하고, 이후 보안 설정을 점검할 준비를 합니다. DB를 처음 접한다면 프로그램 설치보다 먼저 어느 컴퓨터에 무엇을 설치하는지부터 구분하면 편합니다.
내 Windows PC
└─ VMware Workstation: 가상 컴퓨터를 실행하는 프로그램
└─ Ubuntu VM: 실습용 가상 컴퓨터 한 대
└─ MySQL Server: 데이터를 저장하고 요청을 처리하는 DB 프로그램
Windows에 MySQL을 설치하는 것이 아닙니다. VMware로 실행한 Ubuntu 안에 MySQL을 설치합니다. 기존 Ubuntu VM을 사용했으며, 이 글을 위해 운영체제를 다시 설치하지 않았습니다.
| 호스트 PC | Windows | VMware가 설치된 실제 내 컴퓨터 |
| 가상화 프로그램 | VMware Workstation | 내 PC 안에서 실습용 컴퓨터를 실행하는 도구 |
| 게스트 OS | Ubuntu Server 24.04.4 LTS | 가상 컴퓨터 안에 설치한 운영체제 |
| VM 자원 | CPU 2개, RAM 4GB, 디스크 20GB | 이번 실습에 할당한 값이며 제품의 최소 사양을 뜻하지 않음 |
| DB 제품 | MySQL 8.0.46, Ubuntu 패키지 8.0.46-0ubuntu0.24.04.4 | 실제 설치하여 확인한 버전 |
| 네트워크 | Host-only, 기본 경로 없음 | 실습 VM에서 인터넷으로 나가는 경로를 두지 않음 |
| DB 접속 범위 | 127.0.0.1:3306 | Ubuntu VM 내부에서만 DB에 접속 |
127.0.0.1은 '지금 명령을 실행 중인 그 컴퓨터 자신'입니다. Ubuntu에서 이 주소를 사용하면 Ubuntu를 뜻하고, Windows에서 사용하면 Windows를 뜻합니다. Windows에서 127.0.0.1로 접속한다고 Ubuntu DB에 연결되는 것은 아닙니다.
MySQL 8.0.46은 이번 실습에서 사용한 버전입니다. 최신 버전이라는 의미는 아닙니다. 다른 버전은 설정 이름과 지원 기능을 다시 확인해야 합니다.
2. 시작 전 확인
Ubuntu VM의 콘솔을 열고, Ubuntu 설치 때 만든 사용자로 로그인합니다. 아래 명령은 Windows PowerShell이 아니라 Ubuntu 터미널에 입력합니다.
cat /etc/os-release
free -h
df -h /
ip -4 route show default
- 첫 번째 명령은 Ubuntu 버전을 확인합니다.
- free -h는 메모리, df -h /는 디스크 여유 공간을 확인합니다.
- 마지막 명령은 인터넷으로 나가는 기본 경로를 확인합니다. 이번 VM에서는 출력이 없었습니다. 이것만으로 모든 외부 통신이 차단된다고 일반화하지는 않습니다.

VMware의 네트워크 어댑터는 Host-only로 사용합니다. Host-only는 내 PC와 VM 사이의 통신은 가능하므로, '누구도 접근할 수 없는 완전한 단절'을 뜻하지 않습니다. DB도 별도로 로컬 주소에만 열어 둡니다. 취약 상태를 만들기 전에는 복구용 스냅샷을 남깁니다.
3. 화면의 명령 입력 위치 구분하기
| Ubuntu 터미널의 $ 또는 # | 운영체제 명령 | sudo systemctl status mysql |
| MySQL 접속 후 mysql> | SQL 문장 | SELECT VERSION(); |
sudo는 필요한 운영체제 명령을 관리자 권한으로 실행할 때 사용합니다. Ubuntu 로그인 비밀번호를 물으며, 입력해도 글자가 표시되지 않는 것이 정상입니다. MySQL의 -p가 요구하는 것은 DB 계정 비밀번호입니다. 두 비밀번호는 서로 다른 용도입니다.
이 글의 코드 블록에는 명령만 넣었습니다. 설명에 나온 $, #, mysql> 표시는 입력 위치를 알려 주는 표시이므로 직접 입력하지 않습니다. SQL 문장 끝에는 세미콜론 ;을 붙입니다. SQL 입력을 취소하려면 \c, MySQL에서 나오려면 exit;를 입력합니다.
4. MySQL 설치하기
MySQL Server는 데이터를 저장하고 요청을 처리합니다. mysql 명령은 그 서버에 접속하는 클라이언트입니다. 이번 실습에서는 서버와 클라이언트를 같은 Ubuntu VM 안에 설치합니다.
인터넷 연결이 가능한 새 실습 VM
일반적인 설치 방법은 다음과 같습니다. 이 글의 증적은 아래 온라인 경로가 아니라, 이어서 설명하는 오프라인 패키지 설치로 수집했습니다.
sudo apt update
sudo apt install mysql-server
첫 명령은 설치 가능한 프로그램 목록을 갱신하고, 두 번째 명령은 MySQL과 필요한 구성요소를 설치합니다. 인터넷을 통한 준비를 마친 뒤에는 취약 상태 실습 전에 격리망으로 전환합니다.
이번에 사용한 오프라인 설치
인터넷 연결이 가능한 PC에서 Ubuntu 공식 저장소의 설치 파일을 받은 뒤, 파일을 실습 VM으로 전달했습니다. VM의 패키지 목록에서 확인한 SHA-256 값과 다운로드 파일을 대조했습니다.
이번 묶음은 이미 필요한 기본 패키지가 설치된 Ubuntu 24.04 amd64 VM에 맞춘 9개 패키지, 약 22MB입니다. 다른 PC나 새 Ubuntu VM에서는 추가 의존 패키지가 필요할 수 있습니다. 인터넷이 없는 환경에서 설치 파일 하나만 가져오면 설치가 끝난다고 생각하면 안 됩니다.
설치 파일과 SHA256SUMS를 Ubuntu의 /var/tmp/mysql-offline에 둔 상태에서 다음을 실행했습니다. /var/tmp/mysql-offline은 설치 파일을 모아 놓는 임시 폴더이며 MySQL 데이터 저장 위치가 아닙니다.
cd /var/tmp/mysql-offline
sha256sum --check SHA256SUMS
sudo install -m 644 ./*.deb /var/cache/apt/archives/
sudo apt-get --no-download --no-install-recommends install mysql-server
해시 검사에서 각 파일 뒤에 OK가 나오면 목록에 기록된 값과 일치합니다. --no-download는 부족한 파일을 인터넷에서 추가로 받지 못하게 합니다. 필요한 패키지가 빠졌다면 억지로 진행하지 않고, 누락 파일을 준비해야 합니다. 설치할 때 참고하는 패키지 목록과 내려받은 버전도 맞아야 합니다.

5. 설치 완료 확인
Ubuntu 터미널에서 실행합니다.
mysql --version
sudo systemctl is-active mysql
sudo mysql
버전이 출력되고 서비스 상태가 active이면 MySQL이 실행 중입니다. sudo mysql로 접속한 뒤에는 mysql> 화면에서 다음 SQL을 실행합니다.
SELECT VERSION();
SELECT User, Host, plugin, account_locked
FROM mysql.user
ORDER BY User, Host;
SELECT @@bind_address AS bind_address, @@port AS port;

이번 설치 직후에는 root@localhost가 auth_socket을 사용했습니다. 이는 Ubuntu의 OS 사용자 정보를 확인하는 인증 방식입니다. DB 비밀번호를 입력하지 않았다는 이유만으로 빈 비밀번호 계정이라고 판단하지 않습니다. 뒤의 D-01에서는 이 정상 설치 상태와 별도로 취약 상태를 의도적으로 만들어 비교합니다.
mysql.infoschema, mysql.session, mysql.sys는 MySQL 내부 계정입니다. 모르는 이름이라고 지우면 안 됩니다. debian-sys-maint도 이 설치에서 확인된 Ubuntu 패키지 유지관리 계정으로, 용도를 확인하고 유지했습니다.
6. 관리자 계정과 연습용 데이터 준비
설치 직후 sudo mysql로 들어온 관리자 세션에서 실행합니다. dbadmin은 이 실습에서 DB 설정을 관리할 인가된 관리자 계정이며, 프로그램이 데이터를 조회할 때 사용할 계정과 분리합니다.
아래 <...>는 직접 정한 값으로 바꾸는 자리입니다. 꺾쇠와 한글 설명을 비밀번호로 그대로 사용하지 않습니다. 이후 실습 정책을 만족하도록 대문자·소문자·숫자·특수문자를 포함한 12자 이상의 비밀번호를 정합니다. 실제 실습 비밀번호는 공개하지 않습니다.
CREATE USER 'dbadmin'@'localhost'
IDENTIFIED WITH caching_sha2_password BY '<직접_정한_관리자_비밀번호>';
GRANT ALL PRIVILEGES ON *.* TO 'dbadmin'@'localhost' WITH GRANT OPTION;
CREATE DATABASE mysql_lab;
CREATE TABLE mysql_lab.sample (
id INT PRIMARY KEY,
note VARCHAR(60)
);
INSERT INTO mysql_lab.sample VALUES (1, 'training data only');
exit;
이 권한은 실습 설정을 관리하는 DBA에게만 부여합니다. 일반 애플리케이션 계정에 이 명령을 그대로 적용하면 과도한 권한을 주게 됩니다. 실제 운영은 담당 업무와 승인 범위에 따라 더 나누어 설계해야 합니다.
이제 Ubuntu 터미널에서 다음과 같이 DB에 접속할 수 있습니다.
mysql -u dbadmin -p
Enter password:에는 방금 정한 dbadmin의 DB 비밀번호를 입력합니다. 성공하면 mysql>로 바뀝니다. SELECT * FROM mysql_lab.sample;을 입력하여 연습용 데이터 한 줄이 보이는지 확인합니다. 명령 뒤에 실제 비밀번호를 붙이지 않습니다.
7. 앞으로 사용할 계정과 점검 순서
| root | MySQL 기본 관리자 계정. D-01에서 인증 설정 비교 |
| dbadmin | 실습 설정과 진단을 수행하는 인가된 DB 관리자 |
| unused_user | D-02에서 만들었다가 삭제하는 불필요 계정 예시 |
| policy_test | D-03 비밀번호 복잡도·사용 기간 테스트 |
| app_user | D-04에서 관리자 권한을 회수하고 조회 권한만 남기는 계정 |
| reuse_test | D-05 보완 실습의 비밀번호 재사용 테스트 |
각 글은 항목 설명, 점검 목적, 실습 환경, 취약 상태 구성, 최초진단, 조치, 이행진단, 실무 주의사항, 마무리 순서로 진행합니다. D-05는 가이드에 MySQL이 직접 명시되지 않아 MySQL 기능을 이용한 보완 실습으로 구분합니다.
8. 실습 중 자주 헷갈리는 부분
- mysql: command not found: Ubuntu에 MySQL 클라이언트가 설치됐는지 확인합니다.
- ERROR 1045: 비밀번호, User@Host, 인증 방식을 확인합니다. 보안 조치 후 일부 테스트에서 의도적으로 기대하는 결과이기도 합니다.
- Can't connect to local MySQL server: 서비스 상태와 소켓 경로부터 확인합니다. 즉시 비밀번호를 바꾸는 문제는 아닙니다.
- -> 프롬프트가 계속 나옴: 세미콜론이나 따옴표가 닫히지 않았는지 확인합니다. 취소할 때는 \c를 입력합니다.
- SET GLOBAL만 적용함: 실행 중인 값만 바뀌어 재시작 후 사라질 수 있습니다. 지원 변수에는 SET PERSIST를 사용하고 재시작 후 확인합니다.
- 여러 명령을 입력했는데 설명과 다름: 지금 Ubuntu 터미널인지 MySQL 화면인지 먼저 확인합니다.
9. 마무리
Ubuntu VM 안에 MySQL을 설치했고, VM 내부에서 접속하여 버전·계정·접속 주소를 확인했습니다. 다음 글부터는 격리된 환경에서 취약 상태를 구성하고, 설정과 실제 동작을 함께 비교합니다.
증적 수집일은 2026-09-16입니다. 이미지는 당시 실제 명령 결과를 VM 콘솔에 표시하여 캡처했습니다. 결과 이미지의 Collected는 결과 수집 시각, Captured는 화면 캡처 시각입니다. 비밀번호와 인증 해시는 화면에 표시하지 않았습니다.