3월 20, 2022

AWS로 배포하기: RDS를 사용하기 위해 로컬 mysql dump

 프로젝트를 진행하면서 원격 통신을 위해 ngrok을 사용하려다가 mysql이 2002 에러로 맛이 갔습니다.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

ngrok을 설정하기 위해 snap으로 ngrok을 설치하려다가, 이 명령어가 듣지 않아서 해결책을 찾다가 

$ sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target


해당 명령어를 실행해주면 된다는 포스팅을 보고 덜컥 따라한 이유로 mysql이 켜지지 않습니다. 
sudo service mysql restart 로 mysql을 껐다 키려해봐도

Warning! D-Bus connection terminated. mysql

이 에러가 계속 나서 발이 묶였습니다. 결국 임시방편의 해결책을 찾긴 했습니다. wsl --shutdown으로 wsl을 껐다가 다시 켜주면 mysql에 접속이 됩니다.

이는 어쨌든 임시방편일 뿐이고... 후에 프로젝트가 끝나고 시간적 여유가 생기면 꼭 linux공부를 해야겠습니다. wsl을 사용하면서 수많은 고난을 겪으니 운영체제를 꼭 공부해야겠다는 생각이 듭니다(오히려 좋아)

아무튼 ngrok 사용을 포기하고 이참에 aws로 그냥 배포를 하기로 했습니다. 

이때 RDS를 사용하여 클라우드에 데이터베이스를 만든 이후, 이를 EC2와 연동해줘야 합니다. 이 과정에서 기존 Mysql(로컬)을 dump를 뜬 이후, 나의 RDS에 밀어넣어(?)줍니다.

dump가 뭘까요??
데이터베이스 덤프는 테이블 구조와 데이터에 대한 기록입니다. 이는 SQL 선언문의 리스트입니다. 보통 database dump는 데이터 손실에 대비하여 DB를 백업하는 용도로 사용합니다. 

mysqldump -u root -p wantu > wantu.sql

해당 명령어로 wantu db의 스키마가 담긴 wantu.sql 파일을 생성합니다 
(스키마란 자료의 구조, 자료의 표현 방법, 자료간 관계를 형식 언어로 정의한 구조입니다)

그리고 이를 

mysql -h 데이터베이스명 -u root -p wantu < wantu.sql
명령어로 밀어넣어 줍니다

이후 RDS 상의 데이터베이스를 확인해보면 나의 로컬 데이터베이스가 그대로 RDS에 옮겨간 것을 확인할 수 있습니다.