프로젝트/WebSite Renewal

MySQL 데이터를 Psql로 마이그레이션하기

블랑v 2024. 3. 20. 01:15

 

 

프로젝트 과정에서 데이터를 마이그레이션할 상황이 발생했다.

MySQL 기반 데이터를 psql에 적용시켜보자.

 

먼저, Data Export를 통해 dump.sql 파일이 존재함을 가정한다.

 

1. NotePad++ 설치 및 데이터 변환 (심플)

https://notepad-plus-plus.org/downloads/

 

Downloads | Notepad++

 

notepad-plus-plus.org

 

일단 최신 버전의 NotePad를 다운로드하자. 

만일 리눅스 환경이라면

sed -i -e 's/DEFAULT CHARACTER SET [a-z]*\s*//g' dump.sql

을 통해 간편하게 변환할 수도 있다.

 

 

NotePad를 통해 psql에서 사용할 수 없는 데이터를 전부 변환처리 해야 한다.

 

 

 

Ctrl + H를 통해 정규식으로 변환할 것이다.

"찾을 문자열" 필드에 DEFAULT CHARACTER SET [a-z]*\s*를 입력한다.

(이 정규식은 "DEFAULT CHARACTER SET "과 공백을 찾는다.)

 

또한 '정규 표현식' 체크와 바꿀 내용에는 공백을 적용하자. 준비되었다면, 모두 바꾸기를 통해 변경할 수 있다.

수정된 내용을 저장하자. 이것으로 psql에 dump할 것이다.

 

CHARACTER SET 부분을 제거하는 것은 가장 기본적인 전처리 작업이므로, 이 작업을 먼저 해주는 것이 좋다.

이것만으로 데이터 마이그레이션이 전부 진행되지 않을 수도 있다.

 

이후 psql에 변환된 파일을 다음과 같이 적용한다.

psql -U postgres -d new_database_name < dump.sql

 

2. pgLoader 사용 (권장)

https://pgloader.readthedocs.io/en/latest/install.html

 

Installing pgloader — pgloader 3.6.9 documentation

pgloader is a Common Lisp program, tested using the SBCL (>= 1.2.5) and Clozure CL implementations and with Quicklisp to fetch build dependencies. When building from sources, you should always build from the current git HEAD as it’s basically the only so

pgloader.readthedocs.io

 

pgloader는 실시간 데이터베이스 연결을 통한 데이터 마이그레이션을 지원하는 툴이며, 직접적으로 MySQL의 데이터베이스 서버에서 PostgreSQL로 데이터를 이전할 수 있는 기능을 제공한다.

만약 위의 방법으로 되지 않는다면(사실상 이 경우가 많을 것이다.)

 

그러나, pgloader가 MySQL 덤프 파일(.sql 파일 형태의 덤프 데이터)을 직접 읽어서 PostgreSQL 데이터베이스로 이전하는 기능은 제공하지 않는다.

 

그렇기에 MySQL 덤프 파일을 가지고 있고 이를 PostgreSQL 데이터베이스로 이전하고자 할 때, 다음과 같은 절차를 고려할 수 있다.

 

설치 및 연동

apt - yum으로 mysql 설치 후 부트..

 

MySQL 데이터베이스에 덤프 복원(리눅스)

SFTP 등으로 서버 내에 dump 파일을 옮겼다면 다음과 같이 쉽게 복원할 수 있다.

mysql -u username -p database_name < dumpfile.sql

 

아니라면 아래와 같이 Workbench를 통해 넣어볼 수도 있다.

mysql -u root
초반에는 아마 비밀번호 없을 것.

 

 

아, 계정 설정 시 원격 접근을 위해 '%' 옵션을 달아줘야 한다.

DROP USER 'mysql'@'localhost'; //(만약 기존 유저를 삭제한다면)
CREATE USER '유저이름'@'%' IDENTIFIED WITH caching_sha2_password BY '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' WITH GRANT OPTION; //권한 부여
FLUSH PRIVILEGES; //변경 사항 적용

 

이번에는 외부 서버에 직접 workbench로 값을 넣어줘야 하기 때문에, 기존 옵션이 아닌 'Standard TCP/IP overSSH' 옵션을 사용해야 한다.

 

 

그 외에 AWS에서 보안 정책을 사용한다면, 인바운드 규칙에서 허용도 해줄 것.

 

 

 

pgloader를 사용한 마이그레이션

데이터베이스에 덤프가 복원된 후, pgloader를 사용하여 MySQL에서 PostgreSQL로 데이터를 직접 마이그레이션할 수 있다. 

pgloader mysql://user:password@localhost/source_db_name postgresql:///target_db_name
pgloader mysql://[사용자명]:[비밀번호]@[호스트명]/[소스_데이터베이스_이름] postgresql:///[타겟_데이터베이스_이름]

 

 

이 절차는 MySQL 덤프 파일을 PostgreSQL로 직접 변환하지는 않지만, 덤프 파일을 먼저 MySQL 데이터베이스에 복원한 후, 그 데이터를 pgloader를 통해 PostgreSQL로 마이그레이션하는 간접적인 방법을 제공한다. 이 방법은 덤프 데이터를 PostgreSQL로 이전하려는 경우에 유효한 해결책이 될 수 있다.