본문 바로가기

카테고리 없음

리눅스 서버에 MySQL 데이터베이스 설치 및 외부 접속 허용 설정법

 

웹사이트나 애플리케이션을 직접 운영하다 보면 데이터를 저장할 데이터베이스가 필요합니다. 회원 정보, 게시글, 주문 정보, 상품 목록처럼 서비스에서 사용하는 대부분의 데이터는 데이터베이스에 저장됩니다.

그중 MySQL은 웹서비스에서 널리 사용되는 관계형 데이터베이스 관리 시스템입니다. Ubuntu와 같은 리눅스 서버에서도 비교적 쉽게 설치할 수 있으며, 웹 애플리케이션과 연결해 다양한 서비스를 구축할 수 있습니다.

이번 글에서는 Ubuntu 리눅스 서버를 기준으로 MySQL을 설치하고, 데이터베이스와 사용자를 생성한 다음 외부 컴퓨터에서 접속할 수 있도록 설정하는 방법을 알아보겠습니다.

단, MySQL의 외부 접속을 무조건 전체 인터넷에 공개하는 것은 보안상 위험할 수 있습니다. 가능하면 특정 IP 주소만 허용하고, 데이터베이스 관리자 계정인 root를 외부 접속에 사용하는 것도 피하는 것이 좋습니다.

1. MySQL 설치 전에 확인할 사항

먼저 서버에 SSH 등으로 정상적으로 접속할 수 있는지 확인합니다.

이 글에서는 Ubuntu 서버에서 APT 패키지 관리자를 이용하는 방법을 기준으로 설명합니다.

Ubuntu 공식 문서에서도 다음 명령으로 MySQL 서버를 설치하는 방법을 안내하고 있습니다.

먼저 패키지 목록을 최신 상태로 업데이트합니다.

sudo apt update

그다음 MySQL 서버를 설치합니다.

sudo apt install mysql-server

설치가 완료되면 MySQL 서비스 상태를 확인합니다.

sudo systemctl status mysql

active (running)과 같은 메시지가 표시된다면 MySQL 서버가 정상적으로 실행되고 있는 것입니다.

MySQL 공식 문서에서도 Linux 환경에서 설치 후 서비스가 자동으로 시작되는 일반적인 설치 과정을 설명하고 있습니다.

2. MySQL에 처음 접속하기

Ubuntu에서 패키지를 이용해 설치한 MySQL은 환경에 따라 root 계정이 운영체제의 소켓 인증을 사용하는 형태로 구성될 수 있습니다.

다음 명령으로 로컬 MySQL에 접속할 수 있습니다.

sudo mysql

정상적으로 접속되면 MySQL 명령을 입력할 수 있는 화면이 나타납니다.

현재 설치된 MySQL 버전을 확인하려면 다음 명령을 사용할 수 있습니다.

SELECT VERSION();

버전을 확인했다면 다음 명령으로 MySQL을 빠져나옵니다.

exit;

3. 데이터베이스 만들기

이제 웹사이트에서 사용할 데이터베이스를 만들어보겠습니다.

다시 MySQL에 접속합니다.

sudo mysql

예를 들어 데이터베이스 이름을 mywebsite로 정한다면 다음과 같이 입력합니다.

CREATE DATABASE mywebsite
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

utf8mb4는 한글을 포함한 다양한 문자를 저장할 수 있도록 데이터베이스를 구성할 때 자주 사용하는 문자 집합입니다.

생성된 데이터베이스를 확인하려면 다음 명령을 사용합니다.

SHOW DATABASES;

목록에 mywebsite가 나타나면 정상적으로 생성된 것입니다.

4. 외부 접속용 MySQL 사용자 만들기

외부에서 MySQL에 접속할 때 root 계정을 사용하는 것은 권장하지 않습니다.

대신 특정 작업만 수행할 수 있는 별도의 사용자를 만드는 것이 좋습니다.

예를 들어 webuser라는 사용자를 만들겠습니다.

CREATE USER 'webuser'@'%' IDENTIFIED BY '강력한비밀번호';

여기서 %는 여러 호스트에서 접속할 수 있다는 의미입니다.

하지만 실제 운영 환경에서는 %를 무조건 사용하는 것보다 접속이 필요한 특정 IP 주소만 지정하는 방법이 더 안전합니다.

예를 들어 외부 접속을 허용할 컴퓨터의 IP가 203.0.113.10이라면 다음처럼 설정할 수 있습니다.

CREATE USER 'webuser'@'203.0.113.10'
IDENTIFIED BY '강력한비밀번호';

5. 데이터베이스 사용 권한 부여하기

사용자를 만들었다고 해서 모든 데이터베이스를 사용할 수 있는 것은 아닙니다.

webuser에게 mywebsite 데이터베이스를 사용할 권한을 부여합니다.

GRANT ALL PRIVILEGES ON mywebsite.* 
TO 'webuser'@'%';

특정 IP 사용자로 만들었다면 호스트 부분도 동일하게 작성해야 합니다.

GRANT ALL PRIVILEGES ON mywebsite.* 
TO 'webuser'@'203.0.113.10';

권한을 확인하려면 다음 명령을 사용할 수 있습니다.

SHOW GRANTS FOR 'webuser'@'%';

사용자와 권한 설정을 마쳤다면 MySQL에서 빠져나옵니다.

exit;

6. MySQL 외부 접속 설정 변경하기

여기서 중요한 설정이 하나 있습니다.

MySQL은 기본적으로 외부에서 직접 접속하지 못하도록 로컬 주소에서만 연결을 받는 환경으로 설정될 수 있습니다.

Ubuntu 공식 문서에서는 /etc/mysql/mysql.conf.d/mysqld.cnf 파일의 bind-address 설정을 통해 네트워크 연결을 받을 주소를 지정하는 방법을 설명합니다.

설정 파일을 열어보겠습니다.

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

다음과 같은 설정을 찾습니다.

bind-address = 127.0.0.1

외부 네트워크에서 접속해야 한다면 서버의 적절한 네트워크 주소로 변경할 수 있습니다.

예를 들어 서버의 특정 IP를 사용한다면 다음과 같이 설정할 수 있습니다.

bind-address = 192.168.0.5

공개 서버에서 모든 네트워크 인터페이스에 연결하도록 0.0.0.0을 사용하는 방법도 있지만, 이 경우 방화벽과 MySQL 사용자 접근 제한을 반드시 함께 구성해야 합니다.

설정을 변경한 뒤 MySQL을 다시 시작합니다.

sudo systemctl restart mysql

7. MySQL이 외부 연결을 기다리는지 확인하기

MySQL이 어떤 주소와 포트에서 연결을 기다리고 있는지 확인할 수 있습니다.

sudo ss -lntp | grep 3306

MySQL의 기본 포트는 일반적으로 3306입니다.

여기에서 서버가 실제로 어떤 주소에 연결되어 있는지 확인할 수 있습니다.

8. 방화벽에서 3306 포트 허용하기

외부 접속이 되지 않는다면 서버의 방화벽도 확인해야 합니다.

Ubuntu에서 UFW를 사용한다면 다음과 같이 특정 IP에서만 3306 포트 접속을 허용할 수 있습니다.

sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp

그리고 방화벽 상태를 확인합니다.

sudo ufw status

여기서 중요한 점은 다음과 같습니다.

3306 포트를 인터넷 전체에 무조건 공개하는 것은 피하는 것이 좋습니다.

예를 들어 다음과 같은 설정은 매우 신중하게 사용해야 합니다.

sudo ufw allow 3306/tcp

이렇게 하면 외부에 데이터베이스 포트를 광범위하게 노출할 수 있습니다.

가능하다면 애플리케이션 서버와 데이터베이스 서버를 같은 사설 네트워크에 두거나, VPN이나 SSH 터널 등을 이용해 데이터베이스를 인터넷에 직접 노출하지 않는 방법도 고려할 수 있습니다.

9. 외부 컴퓨터에서 MySQL 접속하기

서버 설정이 완료되었다면 다른 컴퓨터에서 MySQL 클라이언트를 이용해 접속할 수 있습니다.

기본적인 접속 형식은 다음과 같습니다.

mysql -h 서버IP -P 3306 -u webuser -p

예를 들어 서버 주소가 203.0.113.20이라면 다음과 같은 형태입니다.

mysql -h 203.0.113.20 -P 3306 -u webuser -p

명령을 실행하면 비밀번호를 입력하라는 메시지가 나타납니다.

정상적으로 접속되었다면 다음 명령으로 데이터베이스를 선택할 수 있습니다.

USE mywebsite;

그리고 테이블 목록을 확인합니다.

SHOW TABLES;

아직 테이블을 만들지 않았다면 아무것도 표시되지 않는 것이 정상입니다.

10. 외부 접속이 안 될 때 확인할 부분

MySQL 설정을 모두 끝냈는데도 접속이 되지 않는 경우가 있습니다.

이럴 때는 한 가지씩 확인하는 것이 좋습니다.

첫 번째, MySQL 서비스 확인

sudo systemctl status mysql

서비스가 실행 중인지 확인합니다.

두 번째, 3306 포트 확인

sudo ss -lntp | grep 3306

MySQL이 외부 연결을 받을 수 있는 주소에서 실행되고 있는지 확인합니다.

세 번째, 방화벽 확인

sudo ufw status

3306 포트가 필요한 IP에 대해 허용되어 있는지 확인합니다.

네 번째, 클라우드 보안 설정 확인

AWS, Azure, Google Cloud 또는 다른 VPS 서비스를 사용한다면 서버 내부 방화벽뿐만 아니라 클라우드의 보안 그룹이나 방화벽 규칙도 확인해야 합니다.

서버에서 포트를 열었다고 해서 클라우드 네트워크에서도 자동으로 허용되는 것은 아닙니다.

다섯 번째, MySQL 사용자 호스트 확인

MySQL에서는 다음 두 사용자가 서로 다른 계정입니다.

'webuser'@'localhost'
'webuser'@'%'

또는

'webuser'@'203.0.113.10'

따라서 사용자 계정을 만들 때 접속 위치를 잘못 지정하면 비밀번호가 맞더라도 접속이 거부될 수 있습니다.

11. 외부 접속 설정에서 가장 중요한 보안 원칙

MySQL 외부 접속을 설정할 때 가장 중요한 것은 “접속이 되는 것”보다 “필요한 사람만 접속할 수 있게 만드는 것”입니다.

다음 원칙을 기억해두면 좋습니다.

첫째, root 계정을 외부 접속용으로 사용하지 않습니다.

둘째, 애플리케이션마다 별도의 MySQL 사용자를 만드는 것이 좋습니다.

셋째, 필요한 데이터베이스에 필요한 권한만 부여합니다.

넷째, 가능하면 특정 IP만 3306 포트에 접근하도록 제한합니다.

다섯째, 데이터베이스를 인터넷에 직접 공개할 필요가 없다면 사설 네트워크나 VPN 등을 사용하는 방법을 고려합니다.

여섯째, 중요한 데이터를 저장하는 서버라면 정기적인 데이터베이스 백업도 준비해야 합니다.

마무리

리눅스 서버에 MySQL을 설치하는 과정 자체는 어렵지 않습니다.

하지만 외부 접속을 허용하는 순간부터는 보안 설정을 함께 생각해야 합니다.

전체 과정은 다음과 같이 정리할 수 있습니다.

MySQL 설치 → 서비스 확인 → 데이터베이스 생성 → 전용 사용자 생성 → 권한 부여 → bind-address 설정 → 3306 접근 제한 → 외부 접속 테스트

특히 처음 서버를 운영한다면 단순히 3306 포트를 열어놓는 것보다 접속 가능한 IP를 제한하고 별도의 사용자를 만들어 필요한 권한만 부여하는 방식을 권장합니다.

MySQL은 웹사이트와 애플리케이션의 중요한 데이터를 보관하는 핵심 프로그램입니다. 따라서 설치가 끝났다는 것만으로 작업을 마무리하지 말고, 방화벽과 사용자 권한, 백업까지 함께 관리하는 습관을 들이는 것이 중요합니다.

서버 운영에서 가장 중요한 것은 단순히 “접속되게 만드는 것”이 아니라 안전하게 접속되도록 만드는 것입니다.


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름