5.4 KiB
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로 다운로드
- VSCode에서
Ctrl+Shift+P→SFTP: Download실행 - 경로 입력:
/tmp/chandj_backup.sql - 다운로드 위치 선택
또는 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
동작 방식:
- 로컬 Docker에서 테이블 덤프 생성
- 서버로 SQL 파일 전송 (SCP)
- 서버 DB에 적용
문제 해결
문제 1: "Access denied for user 'root'@'dev-codebridgex'"
원인: MySQL root 사용자가 해당 호스트에서 접근 권한이 없거나, MySQL 설정 파일의 호스트 바인딩 문제
해결:
- 서버의
.env파일에서 실제 DB 사용자 확인 - 해당 사용자로 mysqldump 실행
- 또는
127.0.0.1사용:mysqldump -h 127.0.0.1 -u root -p chandj - 근본 해결:
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로 설정
# 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