회사에서 윈도우에 설치되어있는 MariaDB를 다른 원격 리눅스 서버에 설치 및 데이터 이관 하면서 가이드를 작성하였다.
회사에 공유한 가이드 문서는 따로 있지만, 벨로그에는 트러블슈팅한 과정과 짜잘짜잘하게 배운 것들을 함께 작성하고 싶어서 글로 남기게 되었다.
설치환경
- Windows 10
- RHEL(RedHat Enterprise Linux) 9.5
- MariaDB 10.5.27
- DB Tool - HeidiSQL
*RHEL 버전별 자세한 MariaDB 버전은 아래 URL에서 확인 가능
https://mariadb.org/download/?t=repo-config
이관할 데이터를 생성하는 방법에는 두 가지가 있다.
처음에 구글링했을 땐 1로 진행한 글들이 많아서 1로 진행했는데,
회사에서 HeidiSQL를 사용하다가 해당 기능이 있는 걸 추후에 발견하여서 같이 적어보았다.
(혹시 CLI 환경이 더 편하신 분들은 <방법2>는 건너뛰셔도 될듯함다.ㅎㅎ)
Windows 환경에서 cmd를 실행한다.

MariaDB 폴더가 위치한 경로를 찾아 이동한다.
cd C:\Program Files\MariaDB 10.11\bin
사용자 권한에 따라 \MariaDB\bin 폴더로의 접근이 불가한 경우가 있었다. 이런 경우 그냥 자신이 저장하고 싶은 다른 경로에 생성해도 상관없다.

> mysqldump -u [username] -p --routines --triggers --events SBT > backup.sql
비밀번호는 백업하려는 DB서버의 root 계정 비밀번호를 입력한다.
> mysqldump -u [username] -p"[password]" --routines --triggers --events SBT > 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/에 전송했다가 리눅스 서버 내에서 다시 옮겨주기로 하였다.



확인해보니 읽기(r), 실행(x) 만 가능하다.(기본 권한인 것 같다.)
아니나다를까 또 거부당했다........왜지.....왜 날 거부하는 것이야........$ nano /etc/ssh/sshd_config
PermitRootLogin prohibit-password 대충 해석해보니 이 부분이 root 계정으로 로그인하는 부분인 것 같다.
prohibit-password는 패스워드 로그인 불가하는 설정이라고 한다.root 계정으로 접근 불가 + /root/ 폴더로 저장도 불가능
⇒ 위와 같이 사용자 계정으로 접근하여 root 디렉토리가 아닌 폴더로 저장하는 방법을 사용해야 한다.
# 패키지 업데이트
$ sudo yum update -y
# MariaDB 패키지 설치
$ sudo yum install -y mariadb-server mariadb
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
# MariaDB root 계정으로 접속
# Enter password : root 계정 비밀번호를 입력합니다.
$ mysql -u root -p
# backup.sql 파일을 복원할 DB 생성
> CREATE DATABASE [DB명];
# 파일을 복원하기 전 잘 생성되었는지 확인
> SHOW DATABASES;
# MariaDB 콘솔 종료
> exit;
$ mysql -u root -p [DB명] --default-character-set=utf8 < /tmp/backup.sql

USE [DB명]
SHOW TABLES
SELECT * FROM [테이블명]
# 계정 생성
> 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';

cd /etc/my.cnf.d/사실 찾는데 좀 오래 걸렸다.
etc 디렉토리로 가서mysql혹은mariadb라는 이름을 찾느라 한참 해맸는데, Claude한테 물어보니 RHEL에서는 my.cnf.d 디렉토리 안에 있다고 한다.
nano mariadb-server.cnf
# bind-address=0.0.0.0허용할 특정 ip가 있다면 할당해준다.
- 127.0.0.1 : localhost
- 0.0.0.0 : 모든 ip
$ sudo systemctl restart mariadb
# 3306 포트 개방
$ sudo firewall-cmd --permanent --add-port=3306/tcp
# 설정값 reload
$ sudo firewall-cmd --reload
# MariaDB 재시작
$ sudo systemctl restart mariadb
# MariaDB가 정상적으로 시작되었는지 상태 확인
$ sudo systemctl status mariadb
정상적으로 시작되면 위와 같이 뜬다.
HeidiSQL로 데이터 이관이 잘 되었는지 확인해본다.
이관한 서버 ip 입력 후, 위에서 생성해주었던 사용자와 암호를 입력하여 접속한다.

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