서버 운영/APM 서버 구축

호스트에서 버추얼 박스 가상머신 내 서버에 MySQL/MariaDB 데이터베이스 접속

씨실과 날실 2021. 4. 7. 09:00

 

0. 작업 조건

작업 조건

가상머신 : vIRTUALbOX 6.1.18

Host OS : Windows 10 20H2

Guest OS : Ubuntu 20.04.2 LTS

DB : MariaDB 10.5

 

1. 사전 작업

사전 작업 내용

가상머신 포트포워딩

호스트 VirtualBox Host-Only Network IP 구성 확인

가상머신 내 OS 패키지 업그레이드

가상머신 네트워크 확인

네트워크 도구 설치

 

자세한 내용은 위 링크를 참고하시기 바랍니다.

단, 위 링크의 포스팅 내용에서 바뀔 내용은 포트 번호를 22가 아닌 3306으로 바꿔주는 것 뿐입니다.

 

2. 방화벽 설정

study@study-VirtualBox:~$ sudo ufw status
[sudo] study의 암호: 
상태: 활성

목적                         동작          출발
--                         --          --
Apache Full                ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
Apache Full (v6)           ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)             

study@study-VirtualBox:~$ sudo ufw status verbose
상태: 활성
로깅: on (low)
기본 설정: deny (내부로 들어옴), allow (외부로 나감), disabled (라우팅 된)
새 프로필: skip

목적                         동작          출발
--                         --          --
80,443/tcp (Apache Full)   ALLOW IN    Anywhere                  
22/tcp                     ALLOW IN    Anywhere                  
80,443/tcp (Apache Full (v6)) ALLOW IN    Anywhere (v6)             
22/tcp (v6)                ALLOW IN    Anywhere (v6)             

study@study-VirtualBox:~$ 

 

study@study-VirtualBox:~$ sudo ufw allow mysql
규칙이 추가되었습니다
규칙이 추가되었습니다 (v6)
study@study-VirtualBox:~$ sudo ufw reload
방화벽을 다시 읽었습니다
study@study-VirtualBox:~$ 

여러분들이 DB로 MySQL을 쓰든 아니면 MariaDB를 쓰든 간에 ufw의에서 포트를 개방할 서비스명으로 위와 같이 mysql로 지정해줍니다.

 

study@study-VirtualBox:~$ sudo ufw allow mariadb
ERROR: 'mariadb'와 일치하는 프로필을 찾을 수 없습니다
study@study-VirtualBox:~$ 

만약 MariaDB를 쓴다고 mysql 대신 mariadb라고 지정하면 위와 같이 오류 메시지를 출력할 것입니다.

 

study@study-VirtualBox:~$ sudo ufw allow 3306

또는 서비스명이 아닌 개방할 포트 번호를 직접 지정해주어도 됩니다.

MySQL과 MariaDB는 사용자가 따로 지정하지 않고 기본값을 그대로 사용한다면 기본 통신 포트로 3306을 사용합니다.

 

3. MariaDB 계정 생성

3-1. MariaDB 계정 생성

외부에서 MariaDB를 관리하기 위해서는 관리용 계정을 생성해줄 필요가 있습니다.

study@study-VirtualBox:~$ sudo mariadb -u root -p

study@study-VirtualBox:~$ sudo mariadb

사용하는 MariaDB의 버전별로 또는 설정값별로 MariaDB 콘솔에 접속하는 방법이 달라질 수 있습니다.

위에서 제시한 두 로그인 명령어들 중 하나만 사용할 수도 있고, 두 방법 모두 지원할 수도 있습니다.

 

이에 대한 내용은 아래 링크의 글을 참고하시기 바랍니다. 해당 내용 자체는 초심자에게는 꽤 복잡할 수는 있으나 익히면 유용합니다.

 

study@study-VirtualBox:~$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.5.9-MariaDB-1:10.5.9+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

콘솔에 접속하면 위와 같은 화면을 볼 수 있습니다.

 

3-2. MariaDB 계정 생성

 

MariaDB [(none)]> CREATE USER 'study'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.070 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'study'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.029 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 

위 예시는새로운 계정을 생성하는 원칙적인 방법입니다.

새 계정 생성, 생성된 계정에 권한 부여, 변경 사항 바로 적용 명령을 순서대로 실행한 모습입니다.

여기서 여러분들은 study(계정명)와 password(암호) 이 두 부분만 사용자가 원하시는 대로 수정해주시고 그외는 똑같이 입력해주시면 됩니다.

 

위 방법이 로컬호스트에서만 콘솔에 접속할 수 있도록 계정을 생성한 방법이라면, 아래는 외부 그 어떤 클라이언트에서도 콘솔에 접속할 수 있는 계정을 생성해주는 방법입니다.  

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'study'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 

단계가 준 것을 볼 수 있습니다. 계정 생성, 권한 부여, 계정 암호 설정 등을 한번에 수행한 것입니다.

 

MySQL/MariaDB 구문 의미

CREATE USER            : 계정 생성

IDENTIFIED BY           : 암호 지정

GRANT                    : 권한 부여

ALL PRIVILEGES ON    : GRANT OPTION을 제외한 모든 권한

*.*                           : 모든 DB와 모든 Table에 대한 권한을 의미한다. 

@’localhost’              : 해당 컴퓨터에서만 접근 가능

@’%’                       : 어떤 클라이언트에서든 접근 가능

WITH GRANT OPTION : 다른 계정에 권한을 부여하고 취소할 수 있는 권한

FLUSH PRIVILEGES      : grant 테이블을 reload 함으로 변경사항을 바로 적용

 

 

생성된 계정과 각 계정별 지원 호스트를 확인해봅시다.

MariaDB [(none)]> select user, host from mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| study       | %         |
| mariadb.sys | localhost |
| mysql       | localhost |
| phpmyadmin  | localhost |
| root        | localhost |
| study       | localhost |
+-------------+-----------+
6 rows in set (0.001 sec)

MariaDB [(none)]> 

로컬호스트(localhost)와 외부 클라이언트(%)에서 접속할 수 있는 study라는 계정이 두 개 생긴 것을 확인할 수 있습니다.

 

MariaDB [(none)]> exit;
Bye
study@study-VirtualBox:~$ 

MariaDB 콘솔에서 빠져나갑시다.

콘솔 종료 방법은 세 가지가 있습니다.

MariaDB 콘솔 종료 명령어

exit; / exit

quit; / quit

\q

 

4. MariaDB 설정 편집

이제 외부에서 접속할 수 있도록 MariaDB 설정 파일을 수정해주어야합니다.

study@study-VirtualBox:~$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

 

우분투에서 저장소를 통해 MySQL을 설치한 경우는 /etc/mysql/my.cnf입니다.

 

  GNU nano 4.8         /etc/mysql/mariadb.conf.d/50-server.cnf                  
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see

# this is read by the standalone daemon and embedded servers
[server]

# this is only for the mysqld standalone daemon
[mysqld]

#
# * Basic Settings
#

user                    = mysql
pid-file                = /run/mysqld/mysqld.pid
basedir                 = /usr
datadir                 = /var/lib/mysql
tmpdir                  = /tmp
lc-messages-dir         = /usr/share/mysql
                                [ 117 행 읽음 ]
^G 도움말 보기^O 기록 저장 ^W 위치 찾기 ^K 잘라내기  ^J 정렬     ^C 커서 위치
^X 나가기    ^R 파일 읽기 ^\ 바꾸기    ^U 붙여넣기  ^T 해당 철자로^_ 지정 행으로

위와 같은 내용을 볼 수 있습니다.

 

여기서 아래와 같은 부분을 수정해줍니다.

수정 내용

skip-external-locking
bind-address            = 127.0.0.1

위 두 항목을 주석처리(#)해주시면 됩니다.

 

위의 외부에서 MariaDB에 접속할 수 있도록 설정하는 내용과 관련하여 참조할만한 공식 문서로 다음의 글이 있습니다.

자세한 내용은 위 글을 참조하시는 것을 권장합니다. 

 

5. MariaDB 설정 재시작

study@study-VirtualBox:~$ sudo service mariadb restart

이제 MariaDB를 재시작해줍니다. 참고로 reload 명령은 앞서 수정한 내용이 적용되지 않습니다.

 

6. HeidiSQL 등 클라이언트 프로그램으로 접속

위와 같이 접속이 잘 되는 것을 확인할 수 있습니다.