티스토리 뷰

MariaDB(MySQL) 원격에서 접근이 가능하도록 설정하기

  • 이 문서는 2016-12-21에 작성되었습니다.
  • 이 문서의 MariaDB는 mysql Ver 15.1 Distrib 5.5.50-MariaDB, for Linux (x86_64) using readline 5.1 입니다.
  • 이 문서의 Centos7은 3.10.0-327.36.3.el7.x86_64 #1 SMP Mon Oct 24 16:09:20 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 입니다.

MariaDB 패키지는 기본적으로 127.0.0.1 만 접근하도록 허용합니다. 보안상의 이유때문인데 예전 MySQL 에서는 skip-networking 지시어를 해제(주석처리) 해서 네트워크 단에서 접근이 가능하도록 할 수 있었습니다. MariaDB 에서는 두가지 요소가 원격 접근에 관여합니다.

  • skip-networking 이 지시가 활성화 되면, 오로지 sock 파일로만 통신을 합니다.
  • bind-address 는 데몬에 접근을 할 수 있는 IP 대역대를 지시합니다.

설정 파일 찾기

데몬의 설정 파일을 찾아 위에 언급했던 두가지 요소 중, skip-networking 을 해제하고 bind-address 에 전체 IP에서 접근하도록 허용하도록 해야합니다.

공식 문서에서는 bind-address 를 주석 처리하라고 하였는데, 제가 테스트 해본 결과는 bind-address 가 해제되어 있으면, 원격 접근을 거부합니다.

그럼 설정 파일의 위치는 보통 /etc/my.cnf 이지만, 아닐 수도 있고, 위치를 모를 수도 있습니다. 다음과 같은 명령으로 찾아보도록하죠.

[]# find / -name my.cnf
/etc/my.cnf

그러면 vim 또는 vi 등 본인에게 익숙한 편집기로 파일을 엽니다.

[]# vim /etc/my.cnf

------vim영역-------
...
[mysqld]
...
#skip-networking
...
bind-address=0.0.0.0

위와 같이 적용하고 저장합니다.

데몬을 재시작하죠.

CentOS 7:

[]# systemctl restart mariadb

CentOS 6-:

[]# service mariadb restart

원격 호스트에서 접근이 가능하도록 사용자 권한 부여하기

MariaDB(MySQL) 은 데몬에서 뿐만 아니라 사용자 권한으로 접근을 제어할 수 있습니다.

그래서 접근이 가능하도록 권한을 특정 사용자에게 부여하도록 합시다.

우선 DBMS에 접근해 보겠습니다.:

[]# mysql -u root -p
input password: ********

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 5.5.28-MariaDB-mariadb1~lucid mariadb.org binary distribution

Copyright (c) 2000, 2012, Oracle, Monty Program Ab and others.

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

MariaDB [(none)]>

localhost 가 아닌 사용자를 찾아 보죠.

MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';
+--------+-----------+
| User   | Host      |
+--------+-----------+
| daniel | %         |
| root   | 127.0.0.1 |
| root   | ::1       |
| root   | gandalf   |
+--------+-----------+
4 rows in set (0.00 sec)

그러면 root 사용자를 192.168.0.* 대의 IP에서 접근이 가능하도록 권한을 부여해 보겠습니다.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

my-new-password 는 비밀번호를 설정하는 부분입니다. 만일 기존의 비밀번호를 그대로 사용하고 싶으시면, IDENTIFIED BY 'my-new-password 를 생략하세요.

방화벽 열기

위에 내용대로 하셨으면, MariaDB 는 준비가 되었습니다. 하지만 OS 단에서는 또 한번의 보안장벽이 있죠. 방화벽인데, 이 방화벽에게 MariaDB 의 포트를 열어 달라고 요청해 보겠습니다. :

CentOS7:

[]# firewall-cmd --add-port=3306/tcp
[]# firewall-cmd --permanet --add-port=3306/tcp
[]# firewall-cmd --reload

CentOS6:

[]#

이렇게 하셨으면 전부 끝났습니다. 그럼 원격지에서 접근이 되는지 확인하는 법은 다음과 같습니다:

[]# mysql -h [MariaDB IP주소] -u [사용자ID] -p

비밀번호를 입력 하신 후 접속이 되면 잘 되는거겠죠?

주의할 점은, 원격지의 주소가 NAT 인 경우 해당 주소를 bind-address 에 부여하면 안된다는 것입니다. 실제적으로 MariaDB 에 접근하려는 IP를 bind 하셔야 합니다.
그리고 기본적으로 MariaDB(MySQL)의 포트는 3306입니다.