ERROR 1046 (3D000): No database selected 오류는 MySQL에서 특정 데이터베이스를 선택하지 않고 쿼리를 실행할 때 발생합니다. 해결 방법은 다음과 같습니다.


🔹 해결 방법 1: USE 명령어로 데이터베이스 선택

먼저 사용할 데이터베이스를 지정해야 합니다.

예를 들어, mydb라는 데이터베이스를 사용하려면 다음 명령어를 실행하세요.

USE mydb;

 

이후에 SELECT, INSERT, UPDATE, DELETE 등의 SQL 문을 실행하면 됩니다.


🔹 해결 방법 2: SQL 문에서 데이터베이스 지정

데이터베이스를 명확하게 지정해서 실행할 수도 있습니다. 

SELECT * FROM mydb.users;

 


🔹 해결 방법 3: MySQL 클라이언트 연결 시 데이터베이스 지정

MySQL에 접속할 때 바로 특정 데이터베이스를 선택할 수도 있습니다.

mysql -u root -p mydb

 

이렇게 실행하면 mydb 데이터베이스가 기본적으로 선택된 상태에서 명령어를 입력할 수 있습니다.

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 설정 문제 가능성 있음.

 

이 오류는 JDBC URL 형식 문제, MariaDB 드라이버 버전 불일치, Gradle 캐시 문제 등으로 인해 발생할 수 있습니다.


🔹 1️⃣ 오류 메시지 예시

java.lang.RuntimeException: Driver org.mariadb.jdbc.Driver claims to not accept jdbcUrl, jdbc:mysql://34.00.00.xxx:3306/myuser?serverTimezone=Asia/Seoul

위와 같은 오류가 발생하면 다음 단계를 확인해보세요.


🔹 2️⃣ JDBC URL을 jdbc:mariadb:// 형식으로 변경

MariaDB를 사용할 때는 jdbc:mysql:// 대신 jdbc:mariadb://을 사용해야 합니다.

기존 설정

spring.datasource.url=jdbc:mysql://34.00.00.xxx:3306/myuser?serverTimezone=Asia/Seoul

변경 후

spring.datasource.url=jdbc:mariadb://34.00.00.xxx:3306/myuser?serverTimezone=Asia/Seoul

🔹 3️⃣ MariaDB JDBC 드라이버 최신 버전 적용

Gradle에서 MariaDB JDBC 드라이버를 최신 버전으로 업데이트해야 합니다.

build.gradle 수정

dependencies {
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:3.1.4'  // 최신 버전 사용
}

최신 버전 확인: Maven Repository - MariaDB


🔹 4️⃣ Gradle 캐시 삭제 후 클린 빌드

Gradle의 캐시 문제로 인해 이전 버전의 드라이버가 계속 참조될 수도 있습니다.

./gradlew --stop
./gradlew clean
rm -rf ~/.gradle/caches
./gradlew build --warning-mode all

클린 빌드 후 재실행!


🔹 5️⃣ spring.datasource.driver-class-name 명시적으로 지정

Spring Boot가 올바른 JDBC 드라이버를 감지하지 못하는 경우 직접 지정해줘야 합니다.

application.properties에 추가

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

GCP에서 VM을 이용해 MySQL 또는 MariaDB를 설치하고, 이를 로컬 환경에서 연결하는 방법을 정리했습니다. 


(1) GCP VM 생성하기

GCP 콘솔 또는 gcloud CLI를 이용해 새로운 VM 인스턴스를 생성합니다.

gcloud compute instances create my-db-server \
    --machine-type=e2-medium \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --tags=mysql-server \
    --zone=asia-northeast3-a

💡 Tip: VM 인스턴스 태그(mysql-server)를 설정하면 방화벽 규칙을 쉽게 적용할 수 있습니다.


(2) MySQL 또는 MariaDB 설치하기

VM에 SSH 접속 후 패키지를 업데이트하고 MySQL 또는 MariaDB를 설치합니다.

sudo apt update
sudo apt install mysql-server -y  # MySQL 설치

MariaDB를 사용하려면:

sudo apt install mariadb-server -y

설치 후, 서비스가 정상적으로 실행되는지 확인합니다.

sudo systemctl status mysql

(3) 원격 접속 허용하기

MySQL/MariaDB의 설정 파일을 수정하여 외부 접속을 허용합니다.

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

bind-address 값을 다음과 같이 변경합니다:

bind-address = 0.0.0.0

변경 후 MySQL을 재시작합니다.

sudo systemctl restart mysql

(4) MySQL 사용자 계정 및 권한 설정

MySQL에 접속하여 원격 접속이 가능한 사용자를 생성합니다.

mysql -u root -p

다음 SQL 명령어를 실행하여 새로운 사용자를 추가하고 권한을 부여합니다.

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

(5) GCP 방화벽에서 3306 포트 개방

MySQL의 기본 포트인 3306을 외부에서 접근할 수 있도록 GCP 방화벽 규칙을 추가합니다.

gcloud compute firewall-rules create mysql-rule \
    --allow tcp:3306 \
    --target-tags=mysql-server \
    --source-ranges=0.0.0.0/0

보안 주의: 운영 환경에서는 IP 제한을 걸어야 합니다!


(6) 로컬에서 MySQL 접속 테스트

로컬 PC에서 MySQL에 접속해봅니다.

mysql -h <GCP_VM_EXTERNAL_IP> -u myuser -p

연결이 정상적으로 이루어지면 완료입니다! 

 

(7) MySQL을 /data/mysql에 설치하기

  1. MySQL 서비스 정지
sudo systemctl stop mysql

   

   2.기존 데이터 디렉토리 이동

sudo mv /var/lib/mysql /data/mysql

 

   3. 심볼릭 링크 생성

sudo ln -s /data/mysql /var/lib/mysql

 

  4. MySQL 설정 파일 수정 (/etc/mysql/mysql.conf.d/mysqld.cnf)

datadir=/data/mysql

  

  5. MySQL 서비스 재시작

sudo systemctl start mysql

설치 후, 서비스가 정상적으로 실행되는지 확인합니다.

sudo systemctl status mysql

+ Recent posts