Ubuntu 26.04에서 MySQL 설치하고 보안까지 끝내는 완전 가이드

2026년 4월 30일
조회수 5
코멘트0
이 글은 다음 언어로도 번역되어 있습니다: 日本語

목차

Ubuntu 26.04 LTS 서버에 MySQL을 설치하고 운영 환경에서 곧바로 사용할 수 있도록 보안까지 단단히 잠가두는 전 과정을 정리했습니다. 새 인스턴스를 받아 들고 어디서부터 손대야 할지 막막한 분이라면, 이 가이드대로 따라 하기만 해도 30분 안에 안정적인 데이터베이스 서버를 만들 수 있습니다.

설치 전에 준비해야 할 것

본격적으로 명령어를 입력하기 전, 다음 두 가지 조건을 충족하는지 확인합니다. 두 가지만 갖춰져 있다면 설치 과정에서 권한 오류로 막히는 일은 거의 없습니다.

  • Ubuntu 26.04 서버 인스턴스에 SSH로 접속할 수 있는 환경
  • root가 아닌 일반 사용자 계정에 sudo 권한이 부여된 상태

운영체제 버전은 lsb_release -a 명령으로 확인할 수 있고, 클라우드 사업자(예: Vultr, AWS Lightsail, GCP Compute Engine)에서 발급한 기본 이미지라면 ubuntu 사용자가 이미 sudo 권한을 가진 상태로 제공됩니다.

1단계 — APT 저장소에서 MySQL 설치하기

Linux 터미널에서 MySQL 설치 진행 화면

Ubuntu 26.04의 기본 APT 저장소에는 MySQL 8.4 서버 패키지가 포함되어 있어 별도의 외부 저장소를 추가하지 않아도 됩니다. 우선 패키지 인덱스를 갱신하고 설치를 진행합니다.

sudo apt update
sudo apt install mysql-server -y

설치가 끝나면 정확히 어떤 버전이 들어왔는지 확인합니다. Ubuntu 26.04 기준으로는 8.4.x LTS 계열이 설치됩니다. 8.4는 2032년까지 지원되는 장기 지원 릴리스이므로 운영 환경에 안전하게 채택할 수 있습니다.

mysql --version
# 예시 출력
mysql  Ver 8.4.8-0ubuntu1 for Linux on x86_64 ((Ubuntu))

2단계 — 서비스 자동 실행 설정

MySQL은 systemd 유닛으로 관리되며, 패키지 설치 직후에는 부팅 시 자동 시작 여부와 즉시 실행 상태가 환경에 따라 다를 수 있습니다. 다음 세 명령으로 자동 시작을 등록하고, 현재 프로세스가 정상 동작하는지 확인합니다.

sudo systemctl enable mysql
sudo systemctl start mysql
sudo systemctl status mysql

상태가 active (running)으로 표시되고 Main PIDmysqld 프로세스가 잡혀 있다면 정상입니다. 출력은 대략 아래와 같습니다.

● mysql.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled)
   Active: active (running)
   Status: "Server is operational"

혹시 서비스가 올라오지 않는다면 sudo journalctl -u mysql -e로 최근 로그를 확인하면 원인이 거의 즉시 드러납니다. 디스크 용량 부족, 포트 3306 충돌, 설정 파일 문법 오류가 가장 흔한 원인입니다.

3단계 — 보안 강화: mysql_secure_installation과 인증 플러그인

데이터베이스 보안 설정 시각화

설치 직후의 MySQL은 익명 사용자, 원격 root 접속, 테스트 데이터베이스 등 운영 환경에 부적합한 기본값을 그대로 가지고 있습니다. mysql_secure_installation 스크립트를 한 번 실행하면 이런 위험 요소를 손쉽게 제거할 수 있습니다.

sudo mysql_secure_installation

스크립트가 묻는 질문에는 다음과 같이 답합니다. 각 응답은 보안을 한 단계씩 끌어올리는 효과가 있습니다.

질문 권장 응답 의미
VALIDATE PASSWORD COMPONENT Y비밀번호 검증 플러그인 활성화
Password Validation Policy 2 (STRONG)특수문자·길이 등 강한 정책 적용
Remove anonymous users? Y익명 계정 제거
Disallow root login remotely? Y원격 root 접속 차단
Remove test database? Y기본 test DB 삭제
Reload privilege tables? Y변경 사항 즉시 반영

root 비밀번호를 사용하려면 인증 플러그인 변경 필요

최신 MySQL 8.4 패키지는 기본적으로 auth_socket 플러그인을 root에 적용하기 때문에, 비밀번호 없이 sudo mysql로만 접속할 수 있습니다. 외부 애플리케이션이나 GUI 도구(예: DBeaver, MySQL Workbench)에서 root로 접속하려면 mysql_native_password를 활성화해야 합니다.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] 섹션에 아래 한 줄을 추가합니다.

[mysqld]
mysql_native_password=ON
user            = mysql
# ... 기존 설정 유지

저장 후 서비스를 재시작하고, 콘솔에 진입해 root 비밀번호를 명시적으로 부여합니다.

sudo systemctl restart mysql
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';
FLUSH PRIVILEGES;
EXIT;

4단계 — 데이터베이스와 전용 사용자 생성

운영 환경에서는 root 계정을 직접 사용하지 않고, 애플리케이션마다 권한이 제한된 사용자를 만들어 사용합니다. 다음은 example_db라는 데이터베이스와 example_user 계정을 만들고 필요한 권한만 부여하는 예시입니다.

mysql -u root -p
CREATE DATABASE example_db;

CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'dbuser_password';

GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';
GRANT CREATE ON *.* TO 'example_user'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'example_user'@'localhost';

FLUSH PRIVILEGES;
EXIT;

GRANT ALL PRIVILEGES ON example_db.*는 해당 데이터베이스 안에서는 모든 작업을 허용한다는 뜻입니다. 그 외에 다른 DB까지 손댈 수 있도록 한 두 줄은 운영 편의를 위한 설정이므로, 보안 정책이 엄격한 환경이라면 생략하고 필요한 시점에만 추가하는 편이 안전합니다.

5단계 — 샘플 테이블로 동작 확인

마지막으로 새로 만든 사용자로 로그인해 데이터를 한 번 넣어보고, 정상적으로 조회되는지 확인합니다. 이 단계까지 무리 없이 진행되면 백엔드 코드에서 동일한 자격 정보로 접속해 곧바로 운영을 시작할 수 있습니다.

mysql -u example_user -p
SHOW DATABASES;
CREATE DATABASE example_demo;
USE example_demo;

CREATE TABLE services (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  description TEXT,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO services (name, description) VALUES
  ('Cloud Compute', '범용 워크로드용 가상 머신'),
  ('Object Storage', 'S3 호환 비정형 데이터 저장소'),
  ('Load Balancer', '서버 인스턴스 간 트래픽 분산');

SELECT * FROM services;

3개의 행이 자동 증가 ID, 시간 정보와 함께 잘 출력된다면 설치·보안·권한 설정이 모두 정상적으로 끝났다는 신호입니다.

운영 환경에서 추가로 챙겨두면 좋은 것들

  • 방화벽 규칙 — UFW로 3306 포트는 특정 앱 서버 IP만 허용. 외부 공개 시 봇 공격의 단골 표적입니다.
  • 자동 백업mysqldump를 cron에 등록하거나 Percona XtraBackup으로 일일 스냅샷을 S3에 보관.
  • 슬로우 쿼리 로그slow_query_log=1, long_query_time=1을 켜두면 1초 이상 걸리는 쿼리를 자동 기록해 성능 튜닝에 유용합니다.

마치며

Ubuntu 26.04에 MySQL 8.4를 설치하고 보안 강화·전용 사용자 분리까지 한 호흡으로 마쳤습니다. 8.4 LTS는 2032년까지 보안 패치가 제공되므로 신규 프로젝트의 1차 데이터베이스로 안심하고 선택할 수 있습니다. 다음 단계로는 마스터-슬레이브 복제, ProxySQL 기반 읽기 부하 분산, Managed Database 전환 등을 고려해보세요.

참조 링크

조회 통계 (최근 30일)
PV 5UV 5
이 글이 도움이 되셨나요? 의견을 들려주세요!
지금까지 0명이 의견을 남겼어요
아직 댓글이 없어요. 첫 댓글을 남겨보세요!