MariaDB를 설치한 후 로컬에서 연결할 때 발생할 수 있는 java.sql.SQLNonTransientConnectionException: Socket fail to connect to host:address=(host=34.00.00.xxx)(port=3306)(type=primary). Connection timed out: getsockopt 오류를 해결하는 방법을 정리했습니다.
이 오류는 GCP 방화벽 설정 문제, MariaDB 원격 접속 허용 미설정, 네트워크 문제 등으로 인해 발생할 수 있습니다.
🔹 1️⃣ 오류 메시지 예시
java.sql.SQLNonTransientConnectionException: Socket fail to connect to host:address=(host=34.00.00.xxx)(port=3306)(type=primary). Connection timed out: getsockopt
위와 같은 오류가 발생하면 다음 단계를 확인해보세요.
🔹 2️⃣ GCP 방화벽에서 3306 포트 개방
GCP VM의 MariaDB이 외부에서 접속할 수 있도록 방화벽을 열어야 합니다.
✅ GCP 방화벽 규칙 확인
gcloud compute firewall-rules list --filter="name:mysql-rule"
출력 결과에서 tcp:3306이 포함된 규칙이 있는지 확인해야 합니다.
✅ 방화벽 규칙이 없으면 새로 추가
gcloud compute firewall-rules create mysql-rule \
--allow tcp:3306 \
--target-tags=mariadb-server \
--source-ranges=0.0.0.0/0
⚠ 보안 주의: 운영 환경에서는 특정 IP만 허용하는 것이 안전합니다.
🔹 3️⃣ MariaDB이 외부 접속을 허용하도록 설정 (bind-address)
MariaDB이 외부에서 접속할 수 있도록 설정 파일을 수정해야 합니다.
✅ MariaDB 설정 파일 (/etc/mysql/mariadb.conf.d/50-server.cnf 또는 /etc/my.cnf) 수정
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address를 0.0.0.0으로 변경
bind-address = 0.0.0.0
파일 저장 후 MariaDB 재시작
sudo systemctl restart mysql
🔹 4️⃣ MariaDB 사용자 계정이 원격 접속을 허용하는지 확인
MariaDB에서 특정 IP 또는 %(모든 IP)를 허용하는 계정이 있는지 확인해야 합니다.
✅ MariaDB 접속 후 계정 확인
mysql -u root -p
다음 명령어 실행:
SELECT host, user FROM mysql.db;
출력 결과에 'myuser'@'%' 가 없으면 원격 접속이 차단될 수 있습니다.
✅ 사용자 권한 재설정
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
🔹 5️⃣ GCP VM에서 MariaDB 포트가 열려 있는지 확인
GCP VM 내부에서 3306 포트가 제대로 열려 있는지 확인해보세요.
✅ VM에서 MariaDB 포트가 LISTEN 중인지 확인
sudo netstat -tulnp | grep 3306
출력이 없다면 MariaDB이 정상적으로 실행되지 않거나, bind-address 설정이 잘못되었을 가능성이 있습니다.
✅ MariaDB이 실행 중인지 확인
sudo systemctl status mysql
MariaDB이 active (running) 상태인지 확인해야 합니다.
🔹 6️⃣ 로컬 PC에서 telnet으로 MariaDB 연결 테스트
로컬에서 MariaDB 포트가 응답하는지 확인하려면:
telnet 34.00.00.xxx 3306
✅ 정상 응답이 오면 연결 가능
❌ Connection refused 또는 timeout 발생하면 방화벽, MariaDB 설정 문제 가능성 있음.