Ubuntu 25.04에 MySQL 8.4 설치하기 — 보안 강화부터 사용자 권한 설정까지

2026년 4월 10일
조회수 1
코멘트0

목차

Ubuntu 25.04에 MySQL 설치하기

MySQL은 SQL을 기반으로 데이터를 저장하고 관리하는 대표적인 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 웹 애플리케이션, 데이터 플랫폼, 그리고 구조화된 데이터를 다루는 거의 모든 서버 환경에서 사용되며, Ubuntu 25.04에 직접 설치하면 안정적이고 일관성 있는 데이터베이스 환경을 빠르게 구성할 수 있습니다.

이 글에서는 신규 서버이든 로컬 개발 환경이든 동일하게 적용할 수 있는, Ubuntu 25.04 위에서 MySQL을 처음부터 설치하고 운영 가능한 상태로 다듬는 전체 과정을 단계별로 정리합니다. APT 저장소에서 MySQL 서버 설치, systemd 서비스 관리, 보안 강화, root 비밀번호 설정, 그리고 사용자·데이터베이스 생성까지 한 번에 다룹니다.

사전 준비: Ubuntu 25.04 인스턴스에 sudo 권한을 가진 일반 사용자 계정으로 접속할 수 있어야 합니다. root 직접 사용은 권장하지 않습니다.

1. APT로 MySQL 서버 설치하기

Ubuntu 25.04는 기본 APT 저장소에 MySQL 8.4 패키지를 포함하고 있어 외부 저장소를 추가할 필요 없이 바로 설치할 수 있습니다. 먼저 패키지 인덱스를 최신 상태로 갱신한 뒤 mysql-server 패키지를 설치합니다.

$ sudo apt update
$ sudo apt install mysql-server -y

설치가 끝나면 다음 명령으로 MySQL이 정상적으로 설치되었는지, 어떤 버전이 들어왔는지 확인합니다.

$ mysql --version

출력 예시는 아래와 같습니다.

mysql  Ver 8.4.4-0ubuntu2 for Linux on x86_64 ((Ubuntu))

2. systemd 서비스로 MySQL 관리하기

MySQL 서버는 mysql이라는 이름의 systemd 서비스로 동작하며, 백그라운드 프로세스 기동과 부팅 시 자동 실행을 systemd가 담당합니다. 서버가 재부팅되더라도 MySQL이 자동으로 살아나도록 부팅 등록과 서비스 시작을 함께 수행합니다.

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

정상적으로 동작 중이라면 출력에 Active: active (running) 그리고 Status: "Server is operational"이 포함되어야 합니다.

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

3. mysql_secure_installation으로 보안 강화하기

기본 설치 상태는 root 계정에 비밀번호가 없고, 익명 사용자와 테스트 데이터베이스가 활성화되어 있어 그대로 두면 위험합니다. MySQL이 제공하는 보안 마법사를 실행해 root 비밀번호 설정, 약한 비밀번호 차단, 익명 사용자 제거, 원격 root 접속 차단을 한 번에 처리합니다.

$ 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 — 테스트 데이터베이스를 삭제합니다.
  • Reload privilege tables now?: Y — 권한 테이블에 변경사항을 즉시 반영합니다.

이어서 root 계정이 mysql_native_password 인증 플러그인을 사용하도록 설정 파일을 수정합니다. 에디터로 mysqld.cnf를 열고 [mysqld] 섹션에 한 줄을 추가합니다.

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
mysql_native_password = ON
user                  = mysql

저장 후 변경사항이 반영되도록 MySQL을 재시작하고, root로 콘솔에 접속해 강력한 비밀번호로 갱신합니다.

$ sudo systemctl restart mysql
$ sudo mysql

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

your_strong_password 부분은 비밀번호 정책을 통과할 수 있는 길고 복잡한 문자열로 교체해야 합니다.

4. 애플리케이션용 사용자와 데이터베이스 만들기

운영 환경에서는 root 계정을 직접 사용하지 않고, 애플리케이션마다 권한이 제한된 별도의 사용자를 두는 것이 원칙입니다. 새 비밀번호로 root 콘솔에 접속한 뒤, 샘플 데이터베이스 app_data와 전용 사용자 app_user를 만들고 필요한 권한만 부여합니다.

$ mysql -u root -p

mysql> CREATE DATABASE app_data;
mysql> CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'your_secure_password';
mysql> GRANT ALL PRIVILEGES ON app_data.* TO 'app_user'@'localhost';
mysql> GRANT CREATE ON *.* TO 'app_user'@'localhost';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'app_user'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

app_data.*에 대해서는 모든 권한을, 다른 데이터베이스에 대해서는 CRUD와 신규 데이터베이스 생성 권한만 부여한 형태입니다. 실제 서비스에서는 필요한 권한만 더 좁게 잘라 부여하는 것을 추천합니다.

5. 샘플 데이터베이스로 동작 검증하기

이제 root 없이도 데이터베이스를 운영할 수 있는지 새로 만든 app_user로 직접 확인해봅니다. 로그인 후 접근 가능한 데이터베이스 목록을 조회하고, 새 데이터베이스 app_demo와 테이블 items를 생성합니다.

$ mysql -u app_user -p

mysql> SHOW DATABASES;
mysql> CREATE DATABASE app_demo;
mysql> USE app_demo;

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

샘플 레코드를 몇 건 삽입한 뒤 SELECT로 조회해 데이터가 정상적으로 들어갔는지 확인합니다.

mysql> INSERT INTO items (name, description) VALUES
  ('Item One',   'This is the first item.'),
  ('Item Two',   'This is the second item.'),
  ('Item Three', 'This is the third item.');

mysql> SELECT * FROM items;

아래와 같이 3건의 레코드가 보이면 사용자 권한과 데이터베이스 동작이 모두 정상이라는 뜻입니다.

+----+------------+--------------------------+---------------------+
| id | name       | description              | created_at          |
+----+------------+--------------------------+---------------------+
|  1 | Item One   | This is the first item.  | 2026-04-10 18:02:49 |
|  2 | Item Two   | This is the second item. | 2026-04-10 18:02:49 |
|  3 | Item Three | This is the third item.  | 2026-04-10 18:02:49 |
+----+------------+--------------------------+---------------------+
3 rows in set (0.00 sec)

마무리

여기까지 따라왔다면 Ubuntu 25.04 서버에 MySQL 8.4를 설치하고, 보안 마법사로 운영 환경에 적합한 수준으로 잠가두었으며, 권한이 분리된 전용 사용자로 데이터베이스를 만들고 데이터를 다루는 것까지 모두 마친 상태입니다. 이 구성은 LAMP·LEMP 스택은 물론 Node.js·Python·Go 같은 백엔드와도 그대로 연결할 수 있는 안정적인 출발점이 됩니다.

다음 단계로는 정기 백업(mysqldump, xtrabackup), slow query log 분석, 그리고 외부 접속이 필요한 경우 bind-address 변경과 방화벽·SSL 설정을 함께 검토하는 것을 권장합니다.

참조 링크

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