Files
sam-sales/DB_SYNC_GUIDE.md
aweso 8f121484d5 영업관리 통합 로그인 명칭수정
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 14:06:32 +09:00

208 lines
5.4 KiB
Markdown

# 데이터베이스 동기화 가이드
## 개요
이 가이드는 서버와 로컬 개발 환경 간 데이터베이스를 동기화하는 방법을 설명합니다.
- 서버 내 계정 pro에서 가져오는 방법 : scp pro@114.203.209.83:/home/pro/chandj_backup.sql .\chandj_backup.sql
- 서버에 백업을 받은 상태로 추정한 후 처리한다.
- **로컬 → 서버**: `mysql_sync.sh` 사용 (테이블 단위 동기화)
- **서버 → 로컬**: 이 문서의 방법 사용 (전체 DB 다운로드)
---
## 서버에서 로컬로 DB 다운로드
### 방법 1: 서버에서 덤프 생성 후 SFTP로 다운로드 (권장)
#### 1단계: 서버에서 덤프 파일 생성
서버에 SSH 접속 후:
```bash
# 서버의 .env 파일 확인
cat /var/www/sales/.env
# 또는
cat /home/webservice/sales/.env
# .env에서 확인한 DB 사용자로 덤프 생성
# 예시 1: root 사용자 (비밀번호 입력 필요)
mysqldump -u root -p chandj > /tmp/chandj_backup.sql
# 예시 2: codebridge 사용자
mysqldump -u codebridge -p chandj > /tmp/chandj_backup.sql
# 예시 3: 127.0.0.1 사용 (소켓 문제 해결)
mysqldump -h 127.0.0.1 -u root -p chandj > /tmp/chandj_backup.sql
# 예시 4: 비밀번호를 환경 변수로 사용 (.env에 비밀번호가 있을 경우)
MYSQL_PWD='[비밀번호]' mysqldump -u root chandj > /tmp/chandj_backup.sql
```
#### 2단계: VSCode SFTP로 다운로드
1. VSCode에서 `Ctrl+Shift+P``SFTP: Download` 실행
2. 경로 입력: `/tmp/chandj_backup.sql`
3. 다운로드 위치 선택
또는 PowerShell에서:
```powershell
scp pro@114.203.209.83:/tmp/chandj_backup.sql .\chandj_backup.sql
```
#### 3단계: 로컬 Docker DB에 적용
```bash
# Docker 컨테이너에 SQL 파일 복사
docker cp chandj_backup.sql sam-mysql-1:/tmp/
# Docker 컨테이너에서 SQL 파일 실행
docker exec -i sam-mysql-1 mysql -uroot -proot chandj < /tmp/chandj_backup.sql
# 또는 직접 파이프 사용
cat chandj_backup.sql | docker exec -i sam-mysql-1 mysql -uroot -proot chandj
```
### 방법 2: PHP 스크립트 사용
#### 1단계: `dump_db.php` 업로드
VSCode SFTP로 `dump_db.php`를 서버에 업로드:
- 업로드 위치: `/var/www/sales/` 또는 `/home/webservice/sales/`
#### 2단계: 서버에서 스크립트 실행
```bash
cd /var/www/sales
php dump_db.php
```
스크립트가 `.env` 파일을 읽어서 자동으로 덤프를 생성합니다.
#### 3단계: 덤프 파일 다운로드 및 적용
방법 1의 2-3단계와 동일합니다.
### 방법 3: PowerShell 스크립트 사용 (Windows)
#### 1단계: `download_db.ps1` 실행
```powershell
.\download_db.ps1
```
**주의**: 비밀번호 입력이 필요한 경우 수동으로 서버에서 실행해야 합니다.
---
## 로컬에서 서버로 DB 업로드
### `mysql_sync.sh` 사용
```bash
# 단일 테이블 동기화
./mysql_sync.sh table_name
# 여러 테이블 동기화
./mysql_sync.sh table1,table2,table3
```
**동작 방식**:
1. 로컬 Docker에서 테이블 덤프 생성
2. 서버로 SQL 파일 전송 (SCP)
3. 서버 DB에 적용
---
## 문제 해결
### 문제 1: "Access denied for user 'root'@'dev-codebridgex'"
**원인**: MySQL root 사용자가 해당 호스트에서 접근 권한이 없거나, MySQL 설정 파일의 호스트 바인딩 문제
**해결**:
1. 서버의 `.env` 파일에서 실제 DB 사용자 확인
2. 해당 사용자로 mysqldump 실행
3. 또는 `127.0.0.1` 사용: `mysqldump -h 127.0.0.1 -u root -p chandj`
4. **근본 해결**: `my.cnf` 파일에서 `bind-address = localhost` 설정 (문제 4 참조)
### 문제 2: "No such file or directory" (PHP 연결 시)
**원인**: MySQL 소켓 파일 경로 문제
**해결**:
- `mysqldump`는 PHP 연결과 무관하게 작동하므로 직접 실행
- 또는 `-h 127.0.0.1` 옵션 사용
### 문제 3: 비밀번호 입력 프롬프트
**해결**:
- `.env` 파일에서 `DB_PASS` 확인
- 환경 변수 사용: `MYSQL_PWD='비밀번호' mysqldump -u root chandj`
### 문제 4: "Access denied" 오류가 계속 발생하는 경우
**원인**: MySQL 설정 파일(`my.cnf`)에서 호스트 바인딩 문제
**해결**: 서버의 `my.cnf` 파일에서 `bind-address``localhost`로 설정
```bash
# my.cnf 파일 위치 확인 (일반적으로 다음 중 하나)
# /etc/mysql/my.cnf
# /etc/my.cnf
# ~/.my.cnf
# my.cnf 파일 편집
sudo nano /etc/mysql/my.cnf
# 또는
sudo nano /etc/my.cnf
# 다음 설정 추가 또는 수정
[mysqld]
bind-address = 127.0.0.1
# 또는
bind-address = localhost
# MySQL 서비스 재시작
sudo systemctl restart mysql
# 또는
sudo service mysql restart
```
**참고**: `bind-address = 127.0.0.1` 또는 `bind-address = localhost`로 설정하면 로컬 호스트에서만 연결을 허용합니다. 이 설정 후 `mysqldump -u root -p chandj` 명령이 정상 작동합니다.
---
## 서버 정보
- **서버 주소**: `114.203.209.83`
- **SSH 사용자**: `pro`
- **DB 이름**: `chandj`
- **서버 DB 경로**: `/var/www/sales/.env` 또는 `/home/webservice/sales/.env`
---
## 빠른 참조
### 서버에서 덤프 생성
```bash
mysqldump -h 127.0.0.1 -u root -p chandj > /tmp/chandj_backup.sql
```
### 로컬로 다운로드 (PowerShell)
```powershell
scp pro@114.203.209.83:/chandj_backup.sql .\chandj_backup.sql
```
### 로컬 Docker에 적용
```bash
cat chandj_backup.sql | docker exec -i sam-mysql-1 mysql -uroot -proot chandj
```
---
**마지막 업데이트**: 2025-01-06