You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
814 lines
18 KiB
Markdown
814 lines
18 KiB
Markdown
|
3 weeks ago
|
# Rocky Linux 9.5 MariaDB 설치 및 설정 가이드
|
||
|
|
|
||
|
|
## 요구사항
|
||
|
|
1. Rocky Linux 9.5 version
|
||
|
|
2. root 권한 또는 sudo 권한이 있는 계정
|
||
|
|
3. 목표: MariaDB 설치, 보안 설정, 사용자 생성, 데이터베이스 생성, 백업 스키마 복원
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1단계: MariaDB 설치
|
||
|
|
|
||
|
|
### 1.1 MariaDB 서버 설치
|
||
|
|
```bash
|
||
|
|
# MariaDB 서버 및 클라이언트 설치
|
||
|
|
dnf install -y mariadb-server mariadb
|
||
|
|
|
||
|
|
# 또는 yum 사용
|
||
|
|
yum install -y mariadb-server mariadb
|
||
|
|
```
|
||
|
|
|
||
|
|
### 1.2 MariaDB 서비스 시작 및 자동 시작 설정
|
||
|
|
```bash
|
||
|
|
# MariaDB 서비스 시작
|
||
|
|
systemctl start mariadb
|
||
|
|
|
||
|
|
# 부팅 시 자동 시작 설정
|
||
|
|
systemctl enable mariadb
|
||
|
|
|
||
|
|
# 서비스 상태 확인
|
||
|
|
systemctl status mariadb
|
||
|
|
```
|
||
|
|
|
||
|
|
### 1.3 MariaDB 버전 확인
|
||
|
|
```bash
|
||
|
|
# MariaDB 버전 확인
|
||
|
|
mysql --version
|
||
|
|
|
||
|
|
# 또는 MariaDB 접속 후 확인
|
||
|
|
mysql -e "SELECT VERSION();"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2단계: MariaDB 보안 설정
|
||
|
|
|
||
|
|
### 2.1 초기 보안 설정 실행
|
||
|
|
```bash
|
||
|
|
# MariaDB 보안 설정 스크립트 실행
|
||
|
|
mysql_secure_installation
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.2 보안 설정 질문 및 권장 답변
|
||
|
|
설정 중 아래와 같은 질문이 나타납니다:
|
||
|
|
|
||
|
|
```
|
||
|
|
1. Enter current password for root (enter for none):
|
||
|
|
→ 처음 설치 시 비밀번호가 없으므로 Enter 입력
|
||
|
|
|
||
|
|
2. Switch to unix_socket authentication [Y/n]
|
||
|
|
→ n (기존 방식 유지 권장)
|
||
|
|
|
||
|
|
3. Change the root password? [Y/n]
|
||
|
|
→ Y (root 비밀번호 설정)
|
||
|
|
→ 새 비밀번호 입력 및 확인
|
||
|
|
|
||
|
|
4. Remove anonymous users? [Y/n]
|
||
|
|
→ Y (익명 사용자 제거)
|
||
|
|
|
||
|
|
5. Disallow root login remotely? [Y/n]
|
||
|
|
→ Y (원격 root 로그인 차단 - 보안 강화)
|
||
|
|
→ n (원격 접속이 필요한 경우)
|
||
|
|
|
||
|
|
6. Remove test database and access to it? [Y/n]
|
||
|
|
→ Y (테스트 데이터베이스 제거)
|
||
|
|
|
||
|
|
7. Reload privilege tables now? [Y/n]
|
||
|
|
→ Y (권한 테이블 즉시 적용)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2.3 root로 MariaDB 접속 확인
|
||
|
|
```bash
|
||
|
|
# root 계정으로 MariaDB 접속
|
||
|
|
mysql -u root -p
|
||
|
|
# 비밀번호 입력 후 접속
|
||
|
|
|
||
|
|
# 접속 확인 후 종료
|
||
|
|
MariaDB [(none)]> show databases;
|
||
|
|
MariaDB [(none)]> exit;
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3단계: 커스텀 포트 설정 (53306)
|
||
|
|
|
||
|
|
### 3.1 MariaDB 포트 변경
|
||
|
|
```bash
|
||
|
|
# MariaDB 설정 파일 편집
|
||
|
|
vi /etc/my.cnf.d/mariadb-server.cnf
|
||
|
|
```
|
||
|
|
|
||
|
|
설정 파일에 포트 추가:
|
||
|
|
```ini
|
||
|
|
[mysqld]
|
||
|
|
port=53306
|
||
|
|
```
|
||
|
|
|
||
|
|
설정 변경 후 서비스 재시작:
|
||
|
|
```bash
|
||
|
|
# MariaDB 재시작
|
||
|
|
systemctl restart mariadb
|
||
|
|
|
||
|
|
# 포트 확인
|
||
|
|
ss -tlnp | grep 53306
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3.2 방화벽 설정 (외부 접속 허용)
|
||
|
|
```bash
|
||
|
|
# 커스텀 포트(53306) 방화벽 허용
|
||
|
|
firewall-cmd --permanent --add-port=53306/tcp
|
||
|
|
firewall-cmd --reload
|
||
|
|
|
||
|
|
# 방화벽 설정 확인
|
||
|
|
firewall-cmd --list-all
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4단계: 데이터베이스 생성
|
||
|
|
|
||
|
|
### 4.1 MariaDB 접속
|
||
|
|
```bash
|
||
|
|
# root로 MariaDB 접속
|
||
|
|
mysql -u root -p
|
||
|
|
# 비밀번호 입력
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.2 데이터베이스 생성
|
||
|
|
```sql
|
||
|
|
-- VIPS 데이터베이스 생성
|
||
|
|
CREATE DATABASE vips CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- 데이터베이스 목록 확인
|
||
|
|
SHOW DATABASES;
|
||
|
|
|
||
|
|
-- VIPS 데이터베이스 선택
|
||
|
|
USE vips;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.3 데이터베이스 문자셋 확인
|
||
|
|
```sql
|
||
|
|
-- 데이터베이스 문자셋 확인
|
||
|
|
SELECT
|
||
|
|
SCHEMA_NAME,
|
||
|
|
DEFAULT_CHARACTER_SET_NAME,
|
||
|
|
DEFAULT_COLLATION_NAME
|
||
|
|
FROM information_schema.SCHEMATA
|
||
|
|
WHERE SCHEMA_NAME = 'vips';
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5단계: 사용자 생성 및 권한 부여
|
||
|
|
|
||
|
|
### 5.1 로컬 접속용 사용자 생성
|
||
|
|
```sql
|
||
|
|
-- VIPS 로컬 접속용 사용자 생성
|
||
|
|
CREATE USER 'vips'@'localhost' IDENTIFIED BY 'xit5811807';
|
||
|
|
|
||
|
|
-- VIPS 데이터베이스에 모든 권한 부여
|
||
|
|
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'localhost';
|
||
|
|
|
||
|
|
-- 권한 적용
|
||
|
|
FLUSH PRIVILEGES;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5.2 원격 접속용 사용자 생성
|
||
|
|
```sql
|
||
|
|
-- 특정 IP에서 접속 가능한 사용자 생성
|
||
|
|
CREATE USER 'vips'@'192.168.1.100' IDENTIFIED BY 'xit5811807';
|
||
|
|
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'192.168.1.100';
|
||
|
|
|
||
|
|
-- 모든 IP에서 접속 가능한 사용자 생성 (application-prd.yml 설정)
|
||
|
|
CREATE USER 'vips'@'%' IDENTIFIED BY 'xit5811807';
|
||
|
|
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'%';
|
||
|
|
|
||
|
|
-- 권한 적용
|
||
|
|
FLUSH PRIVILEGES;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5.3 읽기 전용 사용자 생성 (선택사항)
|
||
|
|
```sql
|
||
|
|
-- 읽기 전용 사용자 생성
|
||
|
|
CREATE USER 'vips_readonly'@'%' IDENTIFIED BY 'vips_readonly_password';
|
||
|
|
GRANT SELECT ON vips.* TO 'vips_readonly'@'%';
|
||
|
|
FLUSH PRIVILEGES;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5.4 사용자 목록 및 권한 확인
|
||
|
|
```sql
|
||
|
|
-- 사용자 목록 확인
|
||
|
|
SELECT User, Host FROM mysql.user;
|
||
|
|
|
||
|
|
-- VIPS 사용자의 권한 확인
|
||
|
|
SHOW GRANTS FOR 'vips'@'localhost';
|
||
|
|
SHOW GRANTS FOR 'vips'@'%';
|
||
|
|
|
||
|
|
-- 현재 사용자 확인
|
||
|
|
SELECT USER(), CURRENT_USER();
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5.5 원격 접속을 위한 MariaDB 설정 변경
|
||
|
|
```bash
|
||
|
|
# MariaDB 설정 파일 편집
|
||
|
|
vi /etc/my.cnf.d/mariadb-server.cnf
|
||
|
|
```
|
||
|
|
|
||
|
|
설정 파일에서 다음 부분 수정:
|
||
|
|
```ini
|
||
|
|
[mysqld]
|
||
|
|
# bind-address를 주석 처리하거나 0.0.0.0으로 변경
|
||
|
|
# bind-address=127.0.0.1
|
||
|
|
bind-address=0.0.0.0
|
||
|
|
|
||
|
|
# 또는 특정 IP만 허용
|
||
|
|
# bind-address=192.168.1.50
|
||
|
|
```
|
||
|
|
|
||
|
|
설정 변경 후 서비스 재시작:
|
||
|
|
```bash
|
||
|
|
# MariaDB 재시작
|
||
|
|
systemctl restart mariadb
|
||
|
|
|
||
|
|
# 재시작 확인
|
||
|
|
systemctl status mariadb
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6단계: 백업 스키마 업로드 (전체 데이터베이스 복원)
|
||
|
|
|
||
|
|
### 6.1 백업 파일 서버로 전송
|
||
|
|
|
||
|
|
**방법 1: SCP 사용 (로컬 PC에서 실행)**
|
||
|
|
```bash
|
||
|
|
# Windows PowerShell 또는 CMD에서 실행
|
||
|
|
scp C:\backup\vips_backup.sql root@서버IP:/tmp/
|
||
|
|
```
|
||
|
|
|
||
|
|
**방법 2: SFTP 사용**
|
||
|
|
```bash
|
||
|
|
# SFTP 접속
|
||
|
|
sftp root@서버IP
|
||
|
|
|
||
|
|
# 파일 전송
|
||
|
|
put vips_backup.sql /tmp/
|
||
|
|
exit
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.2 백업 파일 권한 설정
|
||
|
|
```bash
|
||
|
|
# 백업 파일 권한 확인
|
||
|
|
ls -la /tmp/vips_backup.sql
|
||
|
|
|
||
|
|
# 필요시 권한 변경
|
||
|
|
chmod 644 /tmp/vips_backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.3 백업 파일 복원 - 방법 1 (명령행에서 직접 복원)
|
||
|
|
```bash
|
||
|
|
# 커스텀 포트 53306 사용하여 복원
|
||
|
|
mysql -u root -p -P 53306 vips < /tmp/vips_backup.sql
|
||
|
|
|
||
|
|
# 비밀번호 입력 없이 실행 (스크립트용)
|
||
|
|
mysql -u root -p비밀번호 -P 53306 vips < /tmp/vips_backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.4 백업 파일 복원 - 방법 2 (MySQL 내부에서 복원)
|
||
|
|
```bash
|
||
|
|
# MariaDB 접속 (포트 53306 명시)
|
||
|
|
mysql -u root -p -P 53306
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- VIPS 데이터베이스 선택
|
||
|
|
USE vips;
|
||
|
|
|
||
|
|
-- 백업 파일 실행
|
||
|
|
SOURCE /tmp/vips_backup.sql;
|
||
|
|
|
||
|
|
-- 또는
|
||
|
|
\. /tmp/vips_backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.5 백업 파일 복원 - 방법 3 (새 데이터베이스 생성 포함)
|
||
|
|
백업 파일에 CREATE DATABASE가 포함된 경우:
|
||
|
|
```bash
|
||
|
|
# 데이터베이스 이름 지정 없이 복원 (포트 53306)
|
||
|
|
mysql -u root -p -P 53306 < /tmp/vips_backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.6 대용량 백업 파일 복원
|
||
|
|
대용량 파일의 경우 타임아웃 방지를 위한 옵션 추가:
|
||
|
|
```bash
|
||
|
|
# 타임아웃 설정 증가 (포트 53306)
|
||
|
|
mysql -u root -p -P 53306 \
|
||
|
|
--max_allowed_packet=512M \
|
||
|
|
--connect_timeout=3600 \
|
||
|
|
--wait_timeout=3600 \
|
||
|
|
vips < /tmp/vips_backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6.7 압축된 백업 파일 복원
|
||
|
|
```bash
|
||
|
|
# .gz 파일 복원 (포트 53306)
|
||
|
|
gunzip < /tmp/vips_backup.sql.gz | mysql -u root -p -P 53306 vips
|
||
|
|
|
||
|
|
# .zip 파일 복원 (포트 53306)
|
||
|
|
unzip -p /tmp/vips_backup.sql.zip | mysql -u root -p -P 53306 vips
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7단계: 복원 결과 확인
|
||
|
|
|
||
|
|
### 7.1 MariaDB 접속
|
||
|
|
```bash
|
||
|
|
# VIPS 사용자로 접속 (포트 53306)
|
||
|
|
mysql -u vips -p -P 53306 vips
|
||
|
|
# 비밀번호 입력: xit5811807
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.2 데이터베이스 및 테이블 확인
|
||
|
|
```sql
|
||
|
|
-- 현재 데이터베이스 확인
|
||
|
|
SELECT DATABASE();
|
||
|
|
|
||
|
|
-- 테이블 목록 확인
|
||
|
|
SHOW TABLES;
|
||
|
|
|
||
|
|
-- 테이블 개수 확인
|
||
|
|
SELECT COUNT(*) AS table_count
|
||
|
|
FROM information_schema.tables
|
||
|
|
WHERE table_schema = 'vips';
|
||
|
|
|
||
|
|
-- 각 테이블의 상세 정보 확인
|
||
|
|
SHOW TABLE STATUS FROM vips;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.3 테이블 구조 확인
|
||
|
|
```sql
|
||
|
|
-- 특정 테이블 구조 확인 (VIPS 테이블 예시)
|
||
|
|
DESC tb_vehicle_info;
|
||
|
|
-- 또는
|
||
|
|
DESCRIBE tb_vehicle_info;
|
||
|
|
-- 또는
|
||
|
|
SHOW COLUMNS FROM tb_vehicle_info;
|
||
|
|
|
||
|
|
-- 테이블 생성 DDL 확인
|
||
|
|
SHOW CREATE TABLE tb_vehicle_info;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.4 데이터 확인
|
||
|
|
```sql
|
||
|
|
-- 특정 테이블의 레코드 수 확인
|
||
|
|
SELECT COUNT(*) FROM tb_vehicle_info;
|
||
|
|
|
||
|
|
-- 상위 10개 데이터 조회
|
||
|
|
SELECT * FROM tb_vehicle_info LIMIT 10;
|
||
|
|
|
||
|
|
-- 모든 테이블의 레코드 수 확인
|
||
|
|
SELECT
|
||
|
|
TABLE_NAME,
|
||
|
|
TABLE_ROWS
|
||
|
|
FROM information_schema.TABLES
|
||
|
|
WHERE TABLE_SCHEMA = 'vips'
|
||
|
|
ORDER BY TABLE_ROWS DESC;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.5 인덱스 및 제약조건 확인
|
||
|
|
```sql
|
||
|
|
-- 특정 테이블의 인덱스 확인
|
||
|
|
SHOW INDEX FROM tb_vehicle_info;
|
||
|
|
|
||
|
|
-- 외래키 제약조건 확인
|
||
|
|
SELECT
|
||
|
|
CONSTRAINT_NAME,
|
||
|
|
TABLE_NAME,
|
||
|
|
COLUMN_NAME,
|
||
|
|
REFERENCED_TABLE_NAME,
|
||
|
|
REFERENCED_COLUMN_NAME
|
||
|
|
FROM information_schema.KEY_COLUMN_USAGE
|
||
|
|
WHERE TABLE_SCHEMA = 'vips'
|
||
|
|
AND REFERENCED_TABLE_NAME IS NOT NULL;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.6 데이터베이스 용량 확인
|
||
|
|
```sql
|
||
|
|
-- VIPS 데이터베이스 전체 크기 확인
|
||
|
|
SELECT
|
||
|
|
table_schema AS 'Database',
|
||
|
|
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
|
||
|
|
FROM information_schema.tables
|
||
|
|
WHERE table_schema = 'vips'
|
||
|
|
GROUP BY table_schema;
|
||
|
|
|
||
|
|
-- 테이블별 크기 확인
|
||
|
|
SELECT
|
||
|
|
table_name AS 'Table',
|
||
|
|
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
|
||
|
|
FROM information_schema.tables
|
||
|
|
WHERE table_schema = 'vips'
|
||
|
|
ORDER BY (data_length + index_length) DESC;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7.7 문자셋 확인
|
||
|
|
```sql
|
||
|
|
-- 데이터베이스 문자셋 확인
|
||
|
|
SHOW VARIABLES LIKE 'character_set%';
|
||
|
|
SHOW VARIABLES LIKE 'collation%';
|
||
|
|
|
||
|
|
-- 포트 확인
|
||
|
|
SHOW VARIABLES LIKE 'port';
|
||
|
|
|
||
|
|
-- VIPS 테이블의 문자셋 확인
|
||
|
|
SELECT
|
||
|
|
TABLE_NAME,
|
||
|
|
TABLE_COLLATION
|
||
|
|
FROM information_schema.TABLES
|
||
|
|
WHERE TABLE_SCHEMA = 'vips';
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8단계: 접속 테스트 및 문제 해결
|
||
|
|
|
||
|
|
### 8.1 로컬 접속 테스트
|
||
|
|
```bash
|
||
|
|
# VIPS 사용자로 로컬 접속 테스트 (포트 53306)
|
||
|
|
mysql -u vips -p -P 53306 vips
|
||
|
|
|
||
|
|
# 접속 후 간단한 쿼리 실행
|
||
|
|
mysql -u vips -pxit5811807 -P 53306 vips -e "SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='vips';"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 8.2 원격 접속 테스트 (다른 서버에서)
|
||
|
|
```bash
|
||
|
|
# 원격 서버에서 접속 테스트 (application-prd.yml 설정과 동일)
|
||
|
|
mysql -h 211.119.124.117 -P 53306 -u vips -p vips
|
||
|
|
|
||
|
|
# 비밀번호 포함하여 테스트 (스크립트용)
|
||
|
|
mysql -h 211.119.124.117 -P 53306 -u vips -pxit5811807 vips -e "SHOW TABLES;"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 8.3 접속 문제 해결
|
||
|
|
|
||
|
|
**문제 1: Access denied for user**
|
||
|
|
```sql
|
||
|
|
-- MariaDB에 root로 접속하여 사용자 확인
|
||
|
|
SELECT User, Host FROM mysql.user WHERE User='vips';
|
||
|
|
|
||
|
|
-- 호스트가 일치하지 않으면 재생성
|
||
|
|
DROP USER 'vips'@'잘못된호스트';
|
||
|
|
CREATE USER 'vips'@'올바른호스트' IDENTIFIED BY 'xit5811807';
|
||
|
|
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'올바른호스트';
|
||
|
|
FLUSH PRIVILEGES;
|
||
|
|
```
|
||
|
|
|
||
|
|
**문제 2: Can't connect to MySQL server**
|
||
|
|
```bash
|
||
|
|
# MariaDB 서비스 상태 확인
|
||
|
|
systemctl status mariadb
|
||
|
|
|
||
|
|
# 서비스가 중지되어 있으면 시작
|
||
|
|
systemctl start mariadb
|
||
|
|
|
||
|
|
# 커스텀 포트 53306 리스닝 확인
|
||
|
|
ss -tlnp | grep 53306
|
||
|
|
netstat -tlnp | grep 53306
|
||
|
|
|
||
|
|
# 포트 설정 확인
|
||
|
|
mysql -u root -p -e "SHOW VARIABLES LIKE 'port';"
|
||
|
|
|
||
|
|
# 방화벽 확인
|
||
|
|
firewall-cmd --list-all
|
||
|
|
```
|
||
|
|
|
||
|
|
**문제 3: 원격 접속 불가**
|
||
|
|
```bash
|
||
|
|
# bind-address 설정 확인
|
||
|
|
grep bind-address /etc/my.cnf.d/mariadb-server.cnf
|
||
|
|
|
||
|
|
# 0.0.0.0 또는 원하는 IP로 설정되어 있는지 확인
|
||
|
|
# 변경 후 재시작 필요
|
||
|
|
systemctl restart mariadb
|
||
|
|
```
|
||
|
|
|
||
|
|
**문제 4: 복원 중 에러 발생**
|
||
|
|
```bash
|
||
|
|
# 에러 로그 확인
|
||
|
|
tail -100 /var/log/mariadb/mariadb.log
|
||
|
|
|
||
|
|
# 또는
|
||
|
|
journalctl -u mariadb -n 100
|
||
|
|
|
||
|
|
# SQL 파일 문법 확인 (일부만 실행해보기)
|
||
|
|
head -100 /tmp/myapp_db_backup.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 9단계: 백업 설정 (추가 운영 관리)
|
||
|
|
|
||
|
|
### 9.1 수동 백업 명령어
|
||
|
|
```bash
|
||
|
|
# VIPS 전체 데이터베이스 백업 (포트 53306)
|
||
|
|
mysqldump -u root -p -P 53306 vips > /backup/vips_$(date +%Y%m%d_%H%M%S).sql
|
||
|
|
|
||
|
|
# 압축 백업
|
||
|
|
mysqldump -u root -p -P 53306 vips | gzip > /backup/vips_$(date +%Y%m%d_%H%M%S).sql.gz
|
||
|
|
|
||
|
|
# 특정 테이블만 백업
|
||
|
|
mysqldump -u root -p -P 53306 vips tb_vehicle_info tb_user > /backup/vips_tables_$(date +%Y%m%d).sql
|
||
|
|
|
||
|
|
# 구조만 백업 (데이터 제외)
|
||
|
|
mysqldump -u root -p -P 53306 --no-data vips > /backup/vips_schema_only.sql
|
||
|
|
|
||
|
|
# 데이터만 백업 (구조 제외)
|
||
|
|
mysqldump -u root -p -P 53306 --no-create-info vips > /backup/vips_data_only.sql
|
||
|
|
```
|
||
|
|
|
||
|
|
### 9.2 백업 디렉토리 생성 및 권한 설정
|
||
|
|
```bash
|
||
|
|
# 백업 디렉토리 생성
|
||
|
|
mkdir -p /backup/mariadb
|
||
|
|
|
||
|
|
# 권한 설정
|
||
|
|
chown root:root /backup/mariadb
|
||
|
|
chmod 700 /backup/mariadb
|
||
|
|
```
|
||
|
|
|
||
|
|
### 9.3 자동 백업 스크립트 생성
|
||
|
|
```bash
|
||
|
|
# 백업 스크립트 생성
|
||
|
|
vi /backup/mariadb_backup.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
스크립트 내용:
|
||
|
|
```bash
|
||
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# VIPS 데이터베이스 백업 스크립트
|
||
|
|
DB_NAME="vips"
|
||
|
|
DB_USER="root"
|
||
|
|
DB_PASS="your_root_password"
|
||
|
|
DB_PORT="53306"
|
||
|
|
BACKUP_DIR="/backup/mariadb"
|
||
|
|
DATE=$(date +%Y%m%d_%H%M%S)
|
||
|
|
BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"
|
||
|
|
RETENTION_DAYS=7
|
||
|
|
|
||
|
|
# 백업 디렉토리 생성 (없으면)
|
||
|
|
mkdir -p $BACKUP_DIR
|
||
|
|
|
||
|
|
# 백업 실행
|
||
|
|
echo "Starting VIPS database backup at $(date)"
|
||
|
|
mysqldump -u $DB_USER -p$DB_PASS -P $DB_PORT $DB_NAME | gzip > $BACKUP_FILE
|
||
|
|
|
||
|
|
# 백업 결과 확인
|
||
|
|
if [ $? -eq 0 ]; then
|
||
|
|
echo "Backup completed successfully: $BACKUP_FILE"
|
||
|
|
|
||
|
|
# 파일 크기 확인
|
||
|
|
FILE_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
|
||
|
|
echo "Backup file size: $FILE_SIZE"
|
||
|
|
|
||
|
|
# 오래된 백업 파일 삭제 (7일 이상)
|
||
|
|
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +$RETENTION_DAYS -delete
|
||
|
|
echo "Old backups cleaned up (retention: $RETENTION_DAYS days)"
|
||
|
|
else
|
||
|
|
echo "Backup failed!"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Backup process finished at $(date)"
|
||
|
|
```
|
||
|
|
|
||
|
|
스크립트 실행 권한 부여:
|
||
|
|
```bash
|
||
|
|
chmod 700 /backup/mariadb_backup.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### 9.4 cron을 이용한 자동 백업 설정
|
||
|
|
```bash
|
||
|
|
# crontab 편집
|
||
|
|
crontab -e
|
||
|
|
```
|
||
|
|
|
||
|
|
cron 설정 추가:
|
||
|
|
```bash
|
||
|
|
# 매일 새벽 2시에 백업 실행
|
||
|
|
0 2 * * * /backup/mariadb_backup.sh >> /backup/mariadb/backup.log 2>&1
|
||
|
|
|
||
|
|
# 매주 일요일 새벽 3시에 백업 실행
|
||
|
|
0 3 * * 0 /backup/mariadb_backup.sh >> /backup/mariadb/backup.log 2>&1
|
||
|
|
|
||
|
|
# 매월 1일 새벽 4시에 백업 실행
|
||
|
|
0 4 1 * * /backup/mariadb_backup.sh >> /backup/mariadb/backup.log 2>&1
|
||
|
|
```
|
||
|
|
|
||
|
|
cron 설정 확인:
|
||
|
|
```bash
|
||
|
|
# crontab 목록 확인
|
||
|
|
crontab -l
|
||
|
|
|
||
|
|
# cron 서비스 상태 확인
|
||
|
|
systemctl status crond
|
||
|
|
|
||
|
|
# cron 로그 확인
|
||
|
|
tail -f /var/log/cron
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 전체 실행 순서 요약
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 1. MariaDB 설치
|
||
|
|
dnf install -y mariadb-server mariadb
|
||
|
|
systemctl start mariadb
|
||
|
|
systemctl enable mariadb
|
||
|
|
|
||
|
|
# 2. 보안 설정
|
||
|
|
mysql_secure_installation
|
||
|
|
|
||
|
|
# 3. 커스텀 포트 설정 (53306)
|
||
|
|
vi /etc/my.cnf.d/mariadb-server.cnf
|
||
|
|
# [mysqld] 섹션에 port=53306 추가
|
||
|
|
|
||
|
|
# 4. 원격 접속 설정
|
||
|
|
vi /etc/my.cnf.d/mariadb-server.cnf
|
||
|
|
# bind-address=0.0.0.0 설정
|
||
|
|
systemctl restart mariadb
|
||
|
|
|
||
|
|
# 5. 방화벽 설정
|
||
|
|
firewall-cmd --permanent --add-port=53306/tcp
|
||
|
|
firewall-cmd --reload
|
||
|
|
|
||
|
|
# 6. 포트 확인
|
||
|
|
ss -tlnp | grep 53306
|
||
|
|
|
||
|
|
# 7. MariaDB 접속하여 데이터베이스 및 사용자 생성
|
||
|
|
mysql -u root -p -P 53306
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- VIPS 데이터베이스 생성
|
||
|
|
CREATE DATABASE vips CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- VIPS 사용자 생성 및 권한 부여
|
||
|
|
CREATE USER 'vips'@'localhost' IDENTIFIED BY 'xit5811807';
|
||
|
|
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'localhost';
|
||
|
|
|
||
|
|
-- 원격 접속용 사용자 (application-prd.yml 설정)
|
||
|
|
CREATE USER 'vips'@'%' IDENTIFIED BY 'xit5811807';
|
||
|
|
GRANT ALL PRIVILEGES ON vips.* TO 'vips'@'%';
|
||
|
|
|
||
|
|
FLUSH PRIVILEGES;
|
||
|
|
exit;
|
||
|
|
```
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 8. 백업 파일 업로드 (로컬 PC에서)
|
||
|
|
scp vips_backup.sql root@서버IP:/tmp/
|
||
|
|
|
||
|
|
# 9. 백업 복원 (서버에서, 포트 53306 명시)
|
||
|
|
mysql -u root -p -P 53306 vips < /tmp/vips_backup.sql
|
||
|
|
|
||
|
|
# 10. 복원 확인
|
||
|
|
mysql -u vips -pxit5811807 -P 53306 vips
|
||
|
|
```
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 테이블 확인
|
||
|
|
SHOW TABLES;
|
||
|
|
SELECT COUNT(*) AS table_count FROM information_schema.tables WHERE table_schema='vips';
|
||
|
|
exit;
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 유용한 MariaDB 관리 명령어
|
||
|
|
|
||
|
|
### 데이터베이스 관리
|
||
|
|
```sql
|
||
|
|
-- 모든 데이터베이스 목록
|
||
|
|
SHOW DATABASES;
|
||
|
|
|
||
|
|
-- 데이터베이스 삭제 (주의!)
|
||
|
|
DROP DATABASE vips;
|
||
|
|
|
||
|
|
-- 데이터베이스 이름 변경 (직접 지원 안함, 백업/복원 필요)
|
||
|
|
-- 방법: 백업 → 새 DB 생성 → 복원 → 기존 DB 삭제
|
||
|
|
```
|
||
|
|
|
||
|
|
### 사용자 관리
|
||
|
|
```sql
|
||
|
|
-- 모든 사용자 목록
|
||
|
|
SELECT User, Host FROM mysql.user;
|
||
|
|
|
||
|
|
-- VIPS 사용자 비밀번호 변경
|
||
|
|
ALTER USER 'vips'@'localhost' IDENTIFIED BY 'new_password';
|
||
|
|
ALTER USER 'vips'@'%' IDENTIFIED BY 'new_password';
|
||
|
|
|
||
|
|
-- 사용자 삭제
|
||
|
|
DROP USER 'vips'@'localhost';
|
||
|
|
DROP USER 'vips'@'%';
|
||
|
|
|
||
|
|
-- 특정 권한만 회수
|
||
|
|
REVOKE DELETE ON vips.* FROM 'vips'@'localhost';
|
||
|
|
|
||
|
|
-- 모든 권한 회수
|
||
|
|
REVOKE ALL PRIVILEGES ON vips.* FROM 'vips'@'localhost';
|
||
|
|
```
|
||
|
|
|
||
|
|
### 테이블 관리
|
||
|
|
```sql
|
||
|
|
-- 테이블 삭제
|
||
|
|
DROP TABLE table_name;
|
||
|
|
|
||
|
|
-- 테이블 비우기 (구조는 유지)
|
||
|
|
TRUNCATE TABLE table_name;
|
||
|
|
|
||
|
|
-- 테이블 이름 변경
|
||
|
|
RENAME TABLE old_name TO new_name;
|
||
|
|
|
||
|
|
-- 테이블 복사
|
||
|
|
CREATE TABLE new_table LIKE old_table;
|
||
|
|
INSERT INTO new_table SELECT * FROM old_table;
|
||
|
|
```
|
||
|
|
|
||
|
|
### 성능 모니터링
|
||
|
|
```sql
|
||
|
|
-- 현재 실행 중인 쿼리 확인
|
||
|
|
SHOW PROCESSLIST;
|
||
|
|
|
||
|
|
-- 특정 프로세스 강제 종료
|
||
|
|
KILL [process_id];
|
||
|
|
|
||
|
|
-- 상태 변수 확인
|
||
|
|
SHOW STATUS;
|
||
|
|
SHOW VARIABLES;
|
||
|
|
|
||
|
|
-- 느린 쿼리 확인
|
||
|
|
SHOW VARIABLES LIKE 'slow_query%';
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 보안 권장사항
|
||
|
|
|
||
|
|
1. **강력한 비밀번호 사용**
|
||
|
|
- 최소 12자 이상, 대소문자/숫자/특수문자 조합
|
||
|
|
|
||
|
|
2. **최소 권한 원칙**
|
||
|
|
- 애플리케이션 사용자에게 필요한 최소 권한만 부여
|
||
|
|
- 읽기 전용 작업에는 SELECT 권한만 부여
|
||
|
|
|
||
|
|
3. **원격 root 접속 차단**
|
||
|
|
- root는 localhost에서만 접속 허용
|
||
|
|
|
||
|
|
4. **정기적인 백업**
|
||
|
|
- 매일 자동 백업 설정
|
||
|
|
- 백업 파일 주기적 확인
|
||
|
|
|
||
|
|
5. **방화벽 설정**
|
||
|
|
- 필요한 IP만 53306 포트 접근 허용
|
||
|
|
- 특정 IP 대역만 접근 허용 설정
|
||
|
|
```bash
|
||
|
|
# 특정 IP만 허용 (예시)
|
||
|
|
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="53306" accept'
|
||
|
|
firewall-cmd --reload
|
||
|
|
```
|
||
|
|
|
||
|
|
6. **MariaDB 업데이트**
|
||
|
|
- 정기적인 보안 패치 적용
|
||
|
|
```bash
|
||
|
|
dnf update mariadb-server
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 참고사항
|
||
|
|
|
||
|
|
- **VIPS 프로젝트 설정**
|
||
|
|
- 데이터베이스: vips
|
||
|
|
- 사용자: vips
|
||
|
|
- 비밀번호: xit5811807
|
||
|
|
- 포트: 53306 (커스텀 포트)
|
||
|
|
- 문자셋: UTF-8 (utf8mb4)
|
||
|
|
|
||
|
|
- **MariaDB 기본 정보**
|
||
|
|
- 기본 포트: 3306 (VIPS는 53306 사용)
|
||
|
|
- 설정 파일 위치: `/etc/my.cnf`, `/etc/my.cnf.d/mariadb-server.cnf`
|
||
|
|
- 데이터 디렉토리: `/var/lib/mysql/`
|
||
|
|
- 로그 파일: `/var/log/mariadb/mariadb.log`
|
||
|
|
- 소켓 파일: `/var/lib/mysql/mysql.sock`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 문의 및 추가 정보
|
||
|
|
|
||
|
|
- MariaDB 공식 문서: https://mariadb.com/kb/
|
||
|
|
- Rocky Linux 공식 문서: https://docs.rockylinux.org/
|