본문 바로가기
DB/MariaDB

[MariaDB] 스프링 MariaDB(Mysql) 외부 서버 연결 오류 해결하기 (원격 IP)

by tyrannojung 2021. 3. 16.
반응형

Spring(스프링)에서 우분투 mariadb를 연동 할때,  java.sql.SQLNonTransientConnectionException: 오류를 접하고, 한참 찾다가 정리한걸 공유해봅니다.

 

오류

 

java.sql.SQLNonTransientConnectionException: 
Could not connect to address=(host=xxx.xxx.xxx.xxx)
(port=3306)(type=master) : 
Socket fail to connect to host:xxx.xxx.xxx.xxx, port:3306. Connection refused: connect



java.sql.SQLNonTransientConnectionException: Socket fail to connect to host

 

 

원인

 

원인은 크게 2가지가 있습니다.

 

1. DB서비스가 정상적으로 기동되지 않은 경우입니다. 이럴경우 포트충돌등의 문제가 없는지 오류 메시지를 잘 확인해 보셔야 합니다.

 

2. 정상적으로 기동은 되어 있으나 계정에 대한 접근 권한이 제대로 설정되지 않은 경우 입니다. 

-> 해당 경우는 사용계정에 대한 localhost와 remote에 대해 구분하여 접근 권한을 설정해 준 후 sql developer등의 DB Client툴에서 접속여부를 확인하여야 합니다.

 

접근권한 설정하기 (이미 되어있으신 분들은 다음 챕터를 읽으시길 바랍니다.)

 

create database usfk default character set utf8;
grant all privileges on usfk.* to abc@'%' identified by 'usfk123';
grant all privileges on usfk.* to abc@'localhost' identified by 'usfk123';

 

권한부여

 

위처럼 실행한 후 권한이 잘 설정되었는지 확인해 줍니다.

<-- 권한확인 -->
show grants for usfk@localhost;
show grants for usfk@'%'; 

 

권한확인

 

권한 설정 해도 안될 때.

 

권한 설정 까지 줬는데도 불구하고,  spring에서 java.sql.SQLNonTransientConnectionException: 해당 오류가 나온다면, MariaDB의 외부 IP로의 접속을 위한 설정을 잡아줘야 합니다.

 

netstat -ntlp | grep 3306

(netstat명령어를 통해 호스트에 장착된 네트워크 인터페이스(연결상태, 프로토콜 등) 상태를 확인합니다.)

 

위처럼 127.0.0.1로 나오면 localhost에서는 접속이 되지만 원격 IP에서는 접속이 안됩니다.

 

<!-- 1. 이동 -->
/etc/mysql/mariadb.conf.d/

<!-- 2. vi편집기 실행 -->
sudo vi 50-server.cnf

<!-- 3. 수정 -->
bind-address            = 127.0.0.1 를 주석처리하고
bind-address	  = 0.0.0.0 을 추가하고 저장한다.

 

 

 

마지막으로 변경사항을 저장하기 위해  MariaDB를 재시작 합니다.

service mysql restart



 

반응형

댓글