프로젝트 인프라 migration 하기(MySql dump, certbot 인증서 삭제, ...)

원태연·2024년 7월 17일
1
post-thumbnail

프로젝트를 하다 보면 1년간 사용 가능한 AWS 프리티어의 기한이 만료되는 경우가 발생한다. 이러한 이유가 아니더라도 인프라를 이전해야하는 경우가 발생하는데, 해당 과정에서 마주한 문제들과 해결 방법에 대해 기록 해두고자 한다.

MySQL 데이터 이관 하기 (dump)

제일 중요한 데이터 베이스 이관을 하는 과정이다.
MySQL을 주로 사용하기 때문에, mysqldump를 활용하여 데이터를 덤프하고 새로운 DB 인스턴스에 import를 하려고 했다.

dump 명령

$ mysqldump -u ${user} -p -h ${rds-endpoint} ${database} > ${dump_file_name}.sql

## ssh 터널링이 필요한 경우
$ ssh -i ${PEM_KEY} ${USERNAME}@${IP} "mysqldump -u ${user} -p -h ${rds-endpoint} ${database} > ${dump_file_name}.sql"

사용 예시

$ mysqldump -u admin -p -h project-rds.xxxxx.old.rds.amazonaws.com old_db > 2024_07_16_backup.sql

이후 생성된 sql 파일을 적용하려고 했다.

$ mysql -u admin -p23rdyapp123 -h project-rds.xxxxx.new.rds.amazonaws.com new_db < 2024_07_16_backup.sql

하지만 오류가 발생했다...
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
발생하는 원인은 RDS에서 제공되는 MySQL 서버에서는 DEFINER가 지정 되어있기 때문에 sql 파일에도 해당 정보가 포함되어 있다. 그래서 sql을 수행하고자 할 때, 해당 DEFINER로 실행하지 않기 때문에 위와 같은 오류가 발생한다.

해결하기 위해 sql 파일을 조금 수정하자.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED= '';
위 값들을 지우고 실행하면 정상적으로 동작한다.

애초에, dump를 수행할 때 아래 hint가 나오는데

dump 할 때 부터--set-gtid-purged=OFF 옵션을 추가하여 dump를 하면 위 값들이 없는채로 dump sql 파일이 생성 된다.

EC2 이전

단순히 프로그램만 실행시키는데는 문제가 없다. 하지만, certbot으로 인증서를 발급 받아 https를 제공하고 있다면 몇가지 사전 작업이 필요하다.
우선 적용 되어 있는 certbot 인증서를 확인해보자

$ sudo certbot certificates

이전할 인증서를 우선 제거한다.

$ sudo certbot delete


이후 새로운 서버로 들어가서 다시 인증서를 발급 받자!
https://celuveat.github.io/team-blog/back-blog/doggy/https/https

  • nginx 설정
  • domain record 수정

CloudFront 도메인 이전

S3의 자원을 OAI로 구성하여 CloundFront로 제공하고 있었다.

이때, cloudFront에서도 도메인을 사용중이었기 때문에, 이를 제거하고 새로운 CloudFront 환경에서 다시 ssl을 발급받고 적용해야 했다.


설정 되어 있는 domain 제거 후, 새로운 aws 계정에서 인증서를 발급 받자

profile
앞으로 넘어지기

0개의 댓글