DevOps & Cloud발행일 2025. 9. 20.원본 https://blog.naver.com/jword_/224014353076 ↗

가상머신으로 DB이전하기

가상머신으로 DB이전하기 — #개발자의도구들 #가상머신DB #DB이전 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하...

#DevOps/cloudOps#Naver Blog

​

#개발자의도구들 #가상머신DB #DB이전

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

\* 현재 Spring x 프로젝트를 진행하고 있습니다. 전체 목차를 보시려면 여기를 눌러주세요.

\* Devops stack: 여기

\* 리눅스 기본기: 여기

상황

윈도우에서 서버 개발을 진행하며 윈도우 내부의 maria DB를 사용 중이다.

  • 이를 VM 노드로 이전하고 싶다.

​

사용 DB: MaraiDB

​

서버를 온전하게 돌리려면 DB와 커넥션이 올바르게 되어야한다. 이때 테이블이 올바르게 설정되어야 오류가 없이 잘 돌아간다.

​

그렇게 하려면 VM DB 서버내에서 Create 문을 새롭게 작성해서 테이블을 생성해야하는데 너무 번거롭다. 이를 빠르게 해결할 수 있는 솔루션을 찾아보자.

솔루션

Github를 이용하면 편하게 테이블들을 생성할 수 잇다.

  • Table Create 명령어를 저장한다.
  • VM에서 이를 내려받고 돌린다.

​

github repository 구조

아무래도 프로젝트별, table 별로 개별 저장하는 구조가 편리할 것 같다.

javascript 코드 예제
                                    db-schema/
├── README.md                # 프로젝트 설명
├── init/                    # 초기 스키마 (최초 DB 생성 시 적용)
│   ├── 001_create_users.sql
│   ├── 002_create_posts.sql
│   └── ...
├── migrations/              # 점진적 변경 (ALTER, 추가 테이블 등)
│   ├── 2025-09-20_add_index_users.sql
│   ├── 2025-09-25_add_comments_table.sql
│   └── ...
└── scripts/                 # 적용 스크립트 (자동 실행용)
    ├── apply.sh             # VM에서 실행하면 init/migrations 순서대로 적용
    └── rollback.sh          # 필요시 롤백용
#!/bin/bashDB\_HOST=localhostDB\_USER=rootDB\_PASS=rootpasswordDB\_NAME=myapp​# init 디렉토리 스크립트 실행for file in init/\.sql; do echo "Applying $file..." mysql -h $DB\_HOST -u $DB\_USER -p$DB\_PASS $DB\_NAME < $filedone​# migrations 디렉토리 스크립트 실행​for file in migrations/\.sql; do echo "Applying $file..." mysql -h $DB\_HOST -u $DB\_USER -p$DB\_PASS $DB\_NAME < $filedone

스크립트도 미리 저장해두면 편리하게 실행 가능하다.

​

MariaDB Create Query 추출

기존 사용하던 테이블 구조에 대한 쿼리를 추룰하려면 아래 명령어를 입력한다.

javascript 코드 예제
                                    show create table <table_name>;

vm에 DB 설치하기 (알면 Skip)

Ubuntu

javascript 코드 예제
                                    sudo apt update

# MariaDB 서버 설치
sudo apt install -y mariadb-server

# 서비스 실행 및 부팅시 자동시작
$ sudo systemctl start mariddb
$ sudo systemctl enable mariadb

# 상태 확인
$ systemctl status mariadb

✅
● mariadb.service - MariaDB 10.11.13 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: enabled)
     Active: active (running) since Fri 2025-09-19 07:45:22 UTC; 1min 12s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 2596 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 10 (limit: 30074)
     Memory: 78.9M (peak: 81.8M)
        CPU: 837ms
     CGroup: /system.slice/mariadb.service
             └─2596 /usr/sbin/mariadbd
javascript 코드 예제
                                    Enter current password for root

1. root 계정 현재 비밀번호 입력

2. Switch to unix_socket authentication [Y/n] → n
root 인증을 OS 계정 기반(unix_socket)으로 바꿀지 여부
n: 기존 비밀번호 기반 로그인 유지

3. Change the root password? [Y/n] → n
root 비밀번호 새로 설정 여부
n: 현재 비밀번호 그대로 유지

4. Remove anonymous users? [Y/n] → y
익명 사용자 계정 삭제
✅ 보안상 반드시 삭제하는 게 좋음

5. Disallow root login remotely? [Y/n] → y
root 계정 원격 접속 차단 (localhost에서만 접속 가능)
✅ 보안상 권장

6.Remove test database and access to it? [Y/n] → y
기본 생성되는 test 데이터베이스 삭제
✅ 불필요한 DB 제거, 보안성 강화

7.Reload privilege tables now? [Y/n] → n
지금 바로 권한 테이블을 다시 불러와 변경사항 적용할지 여부
n: 스킵 (하지만 보통은 y 권장 → 변경 즉시 적용됨)

github 파일 불러와서 스크립트 실행 시키기

Ubuntu

DB 셋팅

javascript 코드 예제
                                    👉 User 하나 만들기

CREATE USER '<USER-NAME>'@'%' IDENTIFIED BY '<PASSWORD>';
👉 '%': 모든 호스트에서 접근 가능(원격 접근 테스트 시에는 이렇게 둬도 ok)

GRANT ALL PRIVILEGES ON '<DATABASE-NAME>'.* TO '<USERNAME>'@'<HOST=%>';
FLUSH PRIVILEGES

VM 에서

javascript 코드 예제
                                    git clone <repository-url>

cd dir
chmod +x <scriptfile-name>.sh
./<scriptfile-name>.sh
javascript 코드 예제
                                    db@db:~$ git clone https://github.com/keyveloper/DB_Query
Cloning into 'DB_Query'...

remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (32/32), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 32 (delta 12), reused 32 (delta 12), pack-reused 0 (from 0)
Receiving objects: 100% (32/32), done.
Resolving deltas: 100% (12/12), done.

db@db:~$ cd DB_query
-bash: cd: DB_query: No such file or directory
db@db:~$ cd DB_Query
db@db:~/DB_Query$ ls
x-lite
db@db:~/DB_Query$ cd x-lite

db@db:~/DB_Query/x-lite$ chmod +x ./apply.sh
db@db:~/DB_Query/x-lite$ ./apply.sh
Applying init/create_board.sql...
Applying init/create_followes.sql...
Applying init/create_images.sql...
Applying init/create_likes.sql...
Applying init/create_like_types.sql...
Applying init/create_notifications.sql...
Applying init/create_roles.sql...
Applying init/create_timelines.sql...
Applying init/create_user_imgs.sql...
Applying init/create_user_roles.sql...
Applying init/create_users.sql...
javascript 코드 예제
                                    MariaDB [x]> show tables;
+---------------+
| Tables_in_x   |
+---------------+
| boards        |
| followes      |
| images        |
| like_types    |
| likes         |
| notifications |
| roles         |
| timelines     |
| user_imgs     |
| user_roles    |
| users         |
+---------------+
  • MariaDB에 접속해서 보면 테이블이 잘 생성된 것을 볼 수 있습니다.

외부 접속 안될 때

  1. 오타확인
  • DB이름, 유저이름, 비밀번호, IP 등
  1. mariadb server의 설정
javascript 코드 예제
                                    /etc/mysql/mariadb.conf.d/50-server.cnf   # Ubuntu/Debian
bind-address = 0.0.0.0
sudo systemctl restart mariadb

​