Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 컨테이너
- test
- AWS
- 파이썬
- sftp란
- zsh
- terraform
- terraform 문법
- minikube 설치 방법
- zshrc
- BIG-O NOTATION
- docker
- Shell
- iterm2 shortcuts
- server
- 빅오노테이션
- customize
- python
- 테라폼 기본 문법
- DynamoDB
- 테라폼 문법
- minikube mac 설치
- 도커컴포즈
- Django
- iterm2 단축키
- Bash
- nosql
- docker-compose
- linux
- 도커
Archives
- Today
- Total
sklass의 s-class 프로그래밍 blog
MySQL/MariaDB 데이터를 AWS RDS MySQL/MariaDB로 migrate 하는 법 본문
로컬 MySQL에서 AWS에서 제공하는 RDS MySQL로 데이터베이스를 교체하려 할 때, 현재 로컬 DB의 데이터를 RDS로 복사를 시켜야 하는 경우가 있습니다. 그런 경우 아래와 같이, mysqldump 명령어를 사용하여 처리하면 됩니다.
$ mysqldump -u <LOCAL_USER> \
--databases <LOCAL_DATABASE_NAME> \
--single-transaction \
--compress \
--order-by-primary \
--routines=0 \
--triggers=0 \
--events=0 \
--no-tablespaces \
-p<LOCAL_PASSWORD> | mysql -u <RDS_USER> \
--port=<RDS_PORT> \
--host=<RDS_ENDPOINT_URL> \
-p<RDS_PASSWORD>
사용되는 옵션들은 다음과 같습니다.
- -u <LOCAL_USER>: 로컬 MySQL의 유저 name을 입력합니다.
- --databases <LOCAL_DATABASE_NAME>: 로컬 MySQL 또는 MariaDB 의 데이터베이스 name을 입력해줍니다.
- --single-transaction: 로컬 데이터베이스에서 로드한 모든 데이터가 단일 시점에서 일치하는지 확인하기 위해 사용합니다. mysqldump 가 데이터를 읽는 동안 데이터를 변경하는 다른 프로세스가 있는 경우, 이 옵션을 사용하여 데이터 무결성을 유지합니다.
- --compress: 데이터를 Amazon RDS로 전송하기 전에 로컬 데이터베이스에서 데이터를 압축하여 네트워크 대역폭 사용을 줄이기 위해 사용합니다.
- --order-by-primary: 기본 키를 기준으로 각 테이블의 데이터를 정렬하여 로드 시간을 줄이기 위해 사용합니다.
- --routines=0: stored routines 정보를 포함하지 않고 dump합니다.
- --triggers=0: 트리거 정보를 포함하지 않고 dump합니다.
- --events=0: dump 파일에 이벤트 관련 정보를 포함하지 않고 dump 합니다.
- --no-tablespaces: 이 옵션을 추가하지 않으면, 아래와 같은 에러가 떠서 추가해 주었습니다. 옵션 자체가 하는 역할은 output으로 CREATE LOGFILE GROUP 나 CREATE TABLESPACE를 포함하지 않는 것 입니다.
-
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
-
- -p<LOCAL_PASSWORD>: 로컬 데이터베이스의 암호를 입력해줍니다. 주의할 점은, -p 옵션과 입력한 암호사이에 공백이 없어야 합니다.
- mysql -u <RDS_USER>: RDS에 설정된 MySQL 유저 name을 입력합니다.
- --port=<RDS_PORT>: RDS가 지정한 포트를 입력합니다.
- --host=<RDS_ENDPOINT_URL>: RDS의 Endpoint url을 입력합니다.
- -p<RDS_PASSWORD>: RDS MySQL의 암호를 입력해줍니다.
그 후, Django의 settings.py에 가서, DATABASES 의 설정을 아래와 같이 바꿔줍니다.
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": <RDS_DATABASE_NAME>,
"USER": <RDS_USER>,
"PASSWORD": <RDS_PASSWORD>,
"DEFAULT_CHARACTER_SET": "utf8",
"HOST": <RDS_ENDPOINT_URL>,
"PORT": <RDS_PORT>,
"OPTIONS": {
"init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
이렇게 하면, 먼저 로컬에 저장된 MySQL 데이터를 RDS로 복사시킨뒤, Django와 같은 웹프레임워크에서 DB관련 설정을 RDS로 교체해주면서 로컬에서 리모트로 안전하게 데이터베이스 이전이 가능해집니다.
References
MySQL 또는 MariaDB DB에서 MySQL 또는 MariaDB DB 인스턴스로 데이터 가져오기 - Amazon Relational Database Servic
MySQL 또는 MariaDB DB에서 MySQL 또는 MariaDB DB 인스턴스로 데이터 가져오기 시나리오에서 이 방법이 지원되는 경우 백업 파일 및 Amazon S3를 사용하여 Amazon RDS 내부 및 외부로 데이터를 더 쉽게 이동할
docs.aws.amazon.com
'MySQL' 카테고리의 다른 글
[MySQL] Ubuntu에서 pip install mysqlclient 에러 해결방법 (0) | 2021.12.04 |
---|---|
[MySQL] pip install mysqlclient 설치시 crun 관련 에러 (0) | 2021.12.04 |