Files
sam-sales/DB_SYNC_GUIDE.md
2026-01-06 11:30:58 +09:00

5.4 KiB

데이터베이스 동기화 가이드

개요

이 가이드는 서버와 로컬 개발 환경 간 데이터베이스를 동기화하는 방법을 설명합니다.

  • 서버 내 계정 pro에서 가져오는 방법 : scp pro@114.203.209.83:/home/pro/chandj_backup.sql .\chandj_backup.sql

  • 서버에 백업을 받은 상태로 추정한 후 처리한다.

  • 로컬 → 서버: mysql_sync.sh 사용 (테이블 단위 동기화)

  • 서버 → 로컬: 이 문서의 방법 사용 (전체 DB 다운로드)


서버에서 로컬로 DB 다운로드

방법 1: 서버에서 덤프 생성 후 SFTP로 다운로드 (권장)

1단계: 서버에서 덤프 파일 생성

서버에 SSH 접속 후:

# 서버의 .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+PSFTP: Download 실행
  2. 경로 입력: /tmp/chandj_backup.sql
  3. 다운로드 위치 선택

또는 PowerShell에서:

scp pro@114.203.209.83:/tmp/chandj_backup.sql .\chandj_backup.sql

3단계: 로컬 Docker DB에 적용

# 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단계: 서버에서 스크립트 실행

cd /var/www/sales
php dump_db.php

스크립트가 .env 파일을 읽어서 자동으로 덤프를 생성합니다.

3단계: 덤프 파일 다운로드 및 적용

방법 1의 2-3단계와 동일합니다.

방법 3: PowerShell 스크립트 사용 (Windows)

1단계: download_db.ps1 실행

.\download_db.ps1

주의: 비밀번호 입력이 필요한 경우 수동으로 서버에서 실행해야 합니다.


로컬에서 서버로 DB 업로드

mysql_sync.sh 사용

# 단일 테이블 동기화
./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-addresslocalhost로 설정

# 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

빠른 참조

서버에서 덤프 생성

mysqldump -h 127.0.0.1 -u root -p chandj > /tmp/chandj_backup.sql

로컬로 다운로드 (PowerShell)

scp pro@114.203.209.83:/tmp/chandj_backup.sql .\chandj_backup.sql

로컬 Docker에 적용

cat chandj_backup.sql | docker exec -i sam-mysql-1 mysql -uroot -proot chandj

마지막 업데이트: 2025-01-06