[DB] 리눅스에서 MariaDB 설치 및 데이터 이관(Windows → Linux)하기

yejuice·2025년 2월 21일
0
post-thumbnail

회사에서 윈도우에 설치되어있는 MariaDB를 다른 원격 리눅스 서버에 설치 및 데이터 이관 하면서 가이드를 작성하였다.
회사에 공유한 가이드 문서는 따로 있지만, 벨로그에는 트러블슈팅한 과정과 짜잘짜잘하게 배운 것들을 함께 작성하고 싶어서 글로 남기게 되었다.


설치환경

1. Windows에서 이관할 데이터 생성

1-1. backup.sql 파일 생성

이관할 데이터를 생성하는 방법에는 두 가지가 있다.

  1. cmd에서 직접 명령어를 입력하여 sql 파일을 생성하기(CLI 환경)
  2. DB Tool을 사용하는 것

처음에 구글링했을 땐 1로 진행한 글들이 많아서 1로 진행했는데,
회사에서 HeidiSQL를 사용하다가 해당 기능이 있는 걸 추후에 발견하여서 같이 적어보았다.
(혹시 CLI 환경이 더 편하신 분들은 <방법2>는 건너뛰셔도 될듯함다.ㅎㅎ)

📍방법1. CLI 환경에서 생성

  • Windows 환경에서 cmd를 실행한다.

  • MariaDB 폴더가 위치한 경로를 찾아 이동한다.
    cd C:\Program Files\MariaDB 10.11\bin

    사용자 권한에 따라 \MariaDB\bin 폴더로의 접근이 불가한 경우가 있었다. 이런 경우 그냥 자신이 저장하고 싶은 다른 경로에 생성해도 상관없다.

  • 기존 MariaDB backup.sql 데이터 생성

     > mysqldump -u [username] -p --routines --triggers --events SBT > backup.sql

    비밀번호는 백업하려는 DB서버의 root 계정 비밀번호를 입력한다.

    > mysqldump -u [username] -p"[password]" --routines --triggers --events SBT > backup.sql

    만약 비밀번호까지 한꺼번에 입력하고 싶으면 위와 같이 입력한다.

  • 생성완료!

📍방법2. DB Tool(HeidiSQL)에서 생성

  • HeidiSQL을 관리자권한으로 실행

    관리자권한으로 실행하지 않으면 저장경로에 따라 접근이 제한될 수 있다.

  • SQL 파일 내보내기

    가장 상위에 있는 데이터베이스를 우클릭 한 후, 데이터베이스를 SQL로 내보내기 항목을 클릭한다.

    파일을 저장할 경로와 파일을 저장할 경로와 파일명을 선택한 후, 내보내기 버튼을 클릭한다.

    내보내기를 완료하면 아래와 같이 뜬다.

  • 생성 완료

    생성이 완료되면, /bin 폴더 하위에 backup.sql 파일이 생성된 것을 확인할 수 있다.


1-2. backup.sql 파일 리눅스 서버로 전송

> scp backup.sql [접속할 서버 ip의 username]@[접속할 서버 ip]:/tmp/

Are you sure you want to continue connection (yes/no/[fingerprint])?
-> 키보드로 yes 입력
-> password는 접속할 서버의 접속 비밀번호를 입력한다.

📍서버 전송 프로세스
0. scp 명령어는 서버와 SSH 접속을 연결하는 명령어이다.
1. 입력한 계정으로 리눅스 서버에 로그인(연결)
2. 비밀번호로 인증을 시도
3. 인증에 성공하면 로컬의 backup.sql 파일이 암호화되어 리눅스 서버로 전송
4. /tmp/ 에 해당 파일을 저장

  • 여기서 /tmp/는 임시 디렉토리로, 누구나 읽기/쓰기가 가능 - 접근 가능한 폴더이다.
    보통은 백업 전용 디렉토리를 생성하고 권한을 설정하여 저장하는 것이 권장되지만, 용량이 크기 때문에 일단 /tmp/에 전송했다가 리눅스 서버 내에서 다시 옮겨주기로 하였다.

1-3. 전송완료


*1-2과정 중 막간의 트러블슈팅 (이라쓰고 쓸데없는 삽질...)

  • <삽질 1>

    원래는 /tmp/ 폴더가 아닌 바로 /root/ 폴더로 전송하려 했다.
    그런데 자꾸 Permission denied라며 전송이 거부되었다..

    바-로 리눅스 원격서버에 접속해서 root 폴더의 권한을 확인해보았다. 확인해보니 읽기(r), 실행(x) 만 가능하다.(기본 권한인 것 같다.)
    쓰기(w)가 불가능하므로 모든 권한을 다 가진 root 계정으로 접속해야 해당 디렉토리에 접근 가능하다.

    😓😓생각해보니 학교 다닐 때 root 디렉토리는 root 사용자만 접근 가능하단 걸 배웠었는데, 그걸 까먹고 계속 사용자계정으로 root 디렉토리에 접근하려고 했었던 것이었다..................
    그래서 다시 root 계정으로 접속해보았다. 아니나다를까 또 거부당했다........왜지.....왜 날 거부하는 것이야........

  • <삽질 2>

    그렇다면 Plan B!!
    root 사용자의 SSH 접근 권한을 확인해보았다.
    $ nano /etc/ssh/sshd_config
    PermitRootLogin prohibit-password 대충 해석해보니 이 부분이 root 계정으로 로그인하는 부분인 것 같다.

    그래서 챗지피티 말고 요즘 잘 쓰고 있는 다른 생성형AI인 Claude에게 물어보았다.
    prohibit-password는 패스워드 로그인 불가하는 설정이라고 한다.
    잠시 주석처리 되어있어서 ‘어 그럼 허용한다는 거 아닌가?’ 라고 생각했는데, 주석처리가 되어있으면 기본 값인 ‘no’를 적용한다고 하니
    root 사용자로 직접 SSH 로그인이 불가능함을 알 수 있었다.

    root 계정으로 접근 불가 + /root/ 폴더로 저장도 불가능
    ⇒ 위와 같이 사용자 계정으로 접근하여 root 디렉토리가 아닌 폴더로 저장하는 방법을 사용해야 한다.


  • <번외로 새롭게 배운거>

    용량때문에 /tmp/ 폴더에 저장했지만, /tmp/ 폴더에 저장하는 것이 최선의 방법인지 궁금했다.
    그래서 찾아보니 일반적으로 홈 디렉토리에 저장하는 것이 권장된다고 한다.

    /home/[username]/에 저장할 경우 해당 사용자만 접근 가능하기 때문에,
    모든 사용자가 접근 가능한 /tmp/ 에 저장할 때보다 보안이 강화되고, 파일이 시스템 재부팅 후에도 유지된다는 장점이 있었다.
    다음에는 홈디렉토리에 저장하는 것을 습관화 해야겠다.



2. 데이터 마이그레이션

2-1. MariaDB 패키지 설치

# 패키지 업데이트
$ sudo yum update -y

# MariaDB 패키지 설치
$ sudo yum install -y mariadb-server mariadb

2-2. MariaDB 시작

$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb

2-3. 데이터를 복원할 DB 생성

  • 태초의 MariaDB는 기본테이블들만 존재하기 때문에 backup.sql 파일을 복원할 DB를 생성해주어야 오류를 방지할 수 있다.
# MariaDB root 계정으로 접속
# Enter password : root 계정 비밀번호를 입력합니다.
$ mysql -u root -p

# backup.sql 파일을 복원할 DB 생성
> CREATE DATABASE [DB명];

# 파일을 복원하기 전 잘 생성되었는지 확인
> SHOW DATABASES;

# MariaDB 콘솔 종료
> exit;

2-4. 데이터(backup.sql) 복원

  • 생성해준 DB명에 /tmp/에 있던 backup.sql 파일을 복원한다.
$ mysql -u root -p [DB명] --default-character-set=utf8 < /tmp/backup.sql

  • 복원 완료
    잘 복원 됐는지 확인해보자.
  1. USE [DB명]
    - 테이블 목록을 조회하기 위해 테이블들이 존재하는 DB에 접속한다.
  2. SHOW TABLES
    - 테이블 목록을 조회해보자.
  3. SELECT * FROM [테이블명]
    - 테이블 안의 데이터들도 조회해보자.

3. 외부에서 접속하기 위한 설정

3-1. MariaDB 새 계정 생성 및 권한 부여

  • 계정 생성
# 계정 생성
> CREATE USER 'username'@'ip' IDENTIFIED BY 'password';

# 잘 생성되었는지 확인
> SELECT User, Host FROM mysql.user;

계정 생성 시 ip 설정

  • ‘localhost’
  • ‘%’ : 내.외부 모든 IP에서 접속 허용
  • ‘특정IP’ : 특정 IP만 허용
    → 나는 보안상 우리 회사 사무실 IP를 사용하고 있는 사람들만 접근할 수 있어야하므로, 회사 사무실 ip 대역폭으로 설정해주었다.
    ex) ‘192.xxx.x.%’

  • 권한 부여
# 권한 부여
> GRANT ALL PRIVILEGES ON [DB명].* TO 'username'@'ip';

# 변경사항 적용
> FLUSH PRIVILEGES;

# 잘 변경되었는지 확인
> SHOW GRANTS FOR 'username'@'ip';


3-2. MariaDB conf 파일 수정

  • cd /etc/my.cnf.d/
    mariadb 관련 conf 파일이 있는 디렉토리로 이동한다.

    사실 찾는데 좀 오래 걸렸다.
    etc 디렉토리로 가서 mysql 혹은 mariadb 라는 이름을 찾느라 한참 해맸는데, Claude한테 물어보니 RHEL에서는 my.cnf.d 디렉토리 안에 있다고 한다.


  • nano mariadb-server.cnf# bind-address=0.0.0.0
    이 부분이 외부ip와 바인딩하는 부분이다. 찾아서 위와 같이 주석(#)을 풀어준다.

허용할 특정 ip가 있다면 할당해준다.

  • 127.0.0.1 : localhost
  • 0.0.0.0 : 모든 ip

  • MariaDB 재시작
$ sudo systemctl restart mariadb

3-3. 방화벽 설정

  • MariaDB 기본 포트(3306)를 열어준다.
# 3306 포트 개방
$ sudo firewall-cmd --permanent --add-port=3306/tcp
    
# 설정값 reload
$ sudo firewall-cmd --reload
    
# MariaDB 재시작
$ sudo systemctl restart mariadb
    
# MariaDB가 정상적으로 시작되었는지 상태 확인
$ sudo systemctl status mariadb

정상적으로 시작되면 위와 같이 뜬다.


4. Check

HeidiSQL로 데이터 이관이 잘 되었는지 확인해본다.
이관한 서버 ip 입력 후, 위에서 생성해주었던 사용자와 암호를 입력하여 접속한다.


5. 이관 완료

정상적으로 이관 되었다.!


참고문서

https://drdbg.com/256

profile
말하는 감자 탈출기

0개의 댓글