이 포스트는..
해당 포스트는 이전 포스트에서 백업한 로컬의 데이터베이스 파일을 EC2 에 접속하여 복원하는 과정을 기록한 포스트 입니다. RDS 에서도 복원은 성공하였으나, vpc 요금이 하루 단위로 매섭게 오르는 것을 보고, ec2 내에서 일단은 데이터베이스를 돌리기로 결정하였습니다.
PSCP 를 통해 로컬 데이터베이스 백업 파일을 EC2 인스턴스에 올리기
이와 관련한 내용은 해당 포스트 에서 다루었기 때문에 흐름만 언급하고 넘어간다. 우선 앞서 백업한 파일을 EC2 인스턴스의 /home/ec2-user 경로에 올린다.
SSH 클라이언트를 통해 접속한 ec2 인스턴스 에서 조회해보면 정상적으로 해당 경로에 파일이 업로드 된 것을 확인할 수 있다.
.sql 파일에 대한 사용자/그룹 및 경로 변경하기
현재 올려진 postgres.sql 파일의 권한을 보면 기본 사용자인 ec2-user 에게 있는 것을 볼 수 있다. 또한 /home/ec2-user 라는 공간은 해당 사용자만 접근 가능한 고유의 공간이므로 postgresql 을 설치하면 자동으로 생성되는 postgres 라는 사용자가 접근할 수 없게 되어 있다.
따라서 해당 파일을 postgres 사용자가 접근할 수 있는 장소로 이동시키고, 그 다음에 해당 파일에 대한 권한을 postgres 에게 넘겨주도록 하여 백업 시 해당 파일을 인식할 수 있도록 할 것이다.
파일 사용자 및 권한 변경
현재 로컬에서 전달받은 .sql 파일의 사용자 및 그룹을 살펴보면 모두 ec2-user 로 되어 있다. 이를 모두 postgres 로 변경할 것이다.
아래 명령어를 적용하면 ex-user 를 해당 파일의 사용자로 지정하고, 그룹 또한 ex-user 로 설정한다.
sudo chown ex-user:ex-user /home/ec2-user/파일명.확장자
변경된 이후 모두 postgres 로 적용된 것을 확인할 수 있다.
파일 위치 이동하기
해당 파일은 한 번만 사용하고 삭제할 것이므로 postgres 사용자가 접근 가능한 위치 까지만 이동시킬 것이다. 따라서 /home/ec2-user 경로에서 home 으로 이동 시킨다.
다음 형식으로 명령어를 입력해보자. 이 때 ec2-user 만의 공간에서 다른 공간으로 파일을 이동하는 것은 최상위 권한을 필요로 하기 때문에 sudo 를 앞에 붙여주어야 한다.
sudo mv [파일명] [경로]
그러면 다음과 같이 지정한 위치로 파일이 이동된 것을 볼 수 있다.
데이터베이스 복원하기
이제 해당 파일을 데이터베이스에 복원할 것이다. 데이터베이스에 대한 권한은 전적으로 postgres 의 영역이므로 사용자를 postgres 로 변경한다(sudo su - postgres)
그 후 위치한 경로를 조회해보면 ec2-user 와는 다른 경로가 디폴트 되어 있는 것을 확인할 수 있다.
이 경로 에서 아까 전의 경로로 직접 들어가도 되지만 굳이 그럴 필요는 없다. 리눅스 에서는 / 을 입력하면 루트 경로에서 시작하는 것으로 인식하기 때문에(즉, 절대 경로로 인식된다) 다음과 같이 경로를 지정하면 정상적으로 접근할 수 있다.
psql -U postgres -d postgres -f /home/백업파일명.sql
복원 결과 확인하기
복원을 완료하고, psql 접속 후 데이터베이스 테이블 목록을 조회하면 아래와 같이 정상적으로 추가된 것을 볼 수 있다.
만일 로컬 환경에서 지정한 외래키가 잘 적용되어 있는지 확인하려면 다음 조회 쿼리를 입력하면 된다.
SELECT
tc.table_name,
kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE
constraint_type = 'FOREIGN KEY';
그러면 다음과 같이 각 테이블 별로 관련 정보가 조회된다.
'프로젝트 > 나만의명언집' 카테고리의 다른 글
배포 사이트 색인이 왜 1 개만 생길까요? (0) | 2024.04.08 |
---|---|
사용자가 비속어를 사용한다면, 그것을 어떻게 필터링할까요?(with NodeJS & GPT) (0) | 2024.04.06 |
[나만의 명언집 프로젝트] AWS RDS Postgres 연결 후 EC2 인스턴스와 연결하기(4) | 로컬에서 데이터베이스 백업하기(with pg_dump) (1) | 2024.03.19 |
[나만의 명언집 프로젝트] AWS RDS Postgres 연결 후 EC2 인스턴스와 연결하기(3) | 로컬 데이터베이스를 WSL 우분투에서 백업 (0) | 2024.03.18 |
[나만의 명언집 프로젝트] AWS RDS Postgres 연결 후 EC2 인스턴스와 연결하기(2) | EC2 에서 RDS 접속하기 (0) | 2024.03.18 |