![[Datagrip] MySQL sqldump Export & Import](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZAyox%2FbtsIZWnvGC5%2Fkd0CPlKAX2qvFo3LhRbFz0%2Fimg.png)
사전 준비
- 덤프 파일을 생성할 Mysql 서버가 데이터그립에 연결되어 있어야 합니다
- mysqldump 파일 사용을 위하여 로컬 환경에 Mysql이 설치되어 있어야 합니다.
- 생성된 덤프파일을 통하여 데이터를 불러올 스키마가 필요합니다.
- 이 본문은 스키마 전체를 Export하고 Import 하는 것을 예제로 사용하였습니다. 따라해보실 경우에 참고해주세요.
Export sqldump
1. dump 파일을 생성할 스키마 우클릭 > Import/Export > Export with ‘mysqldump’
2. 덤프 옵션 설정
옵션들이 복잡해보이지만, 하나하나 따져보면 그리 복잡하지 않습니다. 아래의 설명을 보시고 위 각각의 옵션들에 대하여 설명은 다음과 같습니다.
- `Path to mysqldump` : mysqldump 파일의 경로를 입력합니다.
- `Statements` : --complete-insert 옵션의 사용 여부를 지정하며, Insert with columns 를 선택할 경우, 생성하는 모든 INSERT 구문에 컬럼명을 포함하여 작성됩니다.
- `Out Path` : 덤프 파일이 저장될 경로와 덤프파일 이름을 지정합니다. {timestamp}, {data_source}, {database}와 같은 변수를 사용할 수 있습니다.
- `Databases` & `Tables` 설명 생략.
- mysqldump 옵션
- `Multiple rows inserts` : --extended-insert 옵션의 사용 여부를 지정합니다. 체크할 경우 여러 row의 INSERT 구문을 하나의 INSERT 구문으로 작성합니다.
- `Add drop table` : --add-drop-table 옵션의 사용 여부를 지정합니다. 체크할 경우 테이블을 생성하는 CREATE 구문 이전에 DROP 구문을 추가해줍니다.
- `Disable Keys` : --disable-keys 옵션의 사용 여부를 지정합니다. 체크할 경우 외래키 제약 사항을 무시하고 데이터를 로드한 뒤 나중에 제약사항을 걸어 빠르게 데이터를 로드할 수 있습니다.
- `Delayed inserts` : --delayed-inserts 옵션의 사용 여부를 지정합니다. 체크할 경우 INSERT 대신 INSERT_DELAYED 구문을 사용합니다. 트랜잭션을 지원하지 않는 MyISAM 스토리지 엔진에서 사용하는 옵션이며, Mysql 8.0버전부터는 InnoDB스토리지 엔진이 기본이기 때문에 체크하지 않습니다.
- `Export schema without data` : --no-data 옵션의 사용 여부를 지정합니다. 체크할 경우 INSERT 구문이 작성되지 않습니다.
- `MySQL create table options` : --create-options 옵션의 사용 여부를 지정합니다. 체크할 경우 CREATE TABLE 구문 내에 모든 테이블 제약 사항 옵션을 추가하여 작성합니다.
- `Lock tables` : --lock-tables 옵션의 사용 여부를 지정합니다. 체크할 경우 각각의 테이블에 대한 dump 수행 전 해당 테이블에 READ Lock 을 걸게 됩니다. 트랜잭션을 지원하지 않는 MyISAM 스토리지 엔진에서 사용하는 옵션이므로, InnoDB의 경우 체크하지 않습니다.
- `Add locks` : --add-locks 옵션의 사용 여부를 지정합니다. 체크할 경우 dump 파일 테이블의 앞뒤로 LOCK TABLES와 UNLOCK TABLES 구문을 삽입합니다. 이렇게 하면 dump 파일을 다시 로드할 때 삽입 속도를 향상시킬 수 있습니다.
- `Add drop trigger` : --add-drop-trigger 옵션의 사용 여부를 지정합니다. 체크할 경우 트리거 생성 구문 전에 트리거를 drop 하는 구문을 작성합니다.Export sqldump
※ 참고
데이터그립 GUI 이외 mysqldump 옵션들
트랜잭션을 지원하는 InnoDB 스토리지 엔진의 경우 `--single-transaction` 옵션을 사용하여야 합니다. 이 옵션을 사용하면, REPEATABLE READ 레벨에서 dump 를 수행하게 되어 동시성을 보장할 수 있습니다. 주의할 점은 `--single-transaction` 을 사용한 dump 수행 시, 다른 연결에서는 DDL 을 수행해서는 안된다는 것입니다. 일관성있는 dump 를 위해서는 다른 연결로부터 테이블 레벨 Lock 을 허용해서는 안됩니다. 또한 `--lock-tables` 와 `--single-transaction` 옵션은 서로 배타적이기 때문에 함께 사용할 수 없습니다.
procedure, function, trigger 포함한 덤프를 위해서는 `--routines`, `--trigger` 옵션을 추가해줍니다.
BLOB, BINARY 타입의 데이터가 있는 경우 `--hex-blob` 옵션을 지정해주어야 합니다.
아래는 MySQL 8.x버전, InnoDB 스토리지 엔진 기준 제가 기본적으로 사용하고 있는 덤프 옵션입니다.
추가 지정 옵션
`--set-gtid-purged=OFF`
`--hex-blob`
`--single-transaction`
`--routines`
`--triggers`
위와 같이 덤프 옵션을 지정한 뒤 하단의 `Run` 버튼을 클릭합니다.
Import sqldump
1. 덤프 파일 우클릭 > Run
위에서 생성한 덤프 파일을 드래그 & 드롭을 통해 데이터그립 안으로 불러옵니다.
만약 이 단계에서 오류가 발생하면 아래를 참고하여 DataGrip에서 불러올 수 있는 파일 사이즈를 늘려 해결해주세요.
DataGrip에서 불러올 수 있는 파일 사이즈 늘리기
보통 덤프 파일은 용량이 크기 때문에 데이터그립에서 불러오지 못하는 경우가 있습니다. 이럴 경우 idea.properties 파일을 수정해주어야 합니다. 윈도우의 경우 아래 경로에 idea.properties 파일이 위치합니다.(사람마다 조금씩 다름) C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.5\bin


위 사진처럼 idea.properties 파일에서 `idea.max.intellisense.filesize` 를 늘려줍니다. 이 때 파일사이즈를 너무 크게하면 오류가 발생할 수 있으므로, 적당히 크게(?) 늘려주는 것을 권장합니다. (파일 사이즈 숫자 단위는 KiB 입니다.)
2. Import 할 스키마 지정
Target datasouce / schema에 [+] 버튼을 눌러 .sql 파일을 실행할 스키마를 지정하고 하단의 Run 버튼을 클릭합니다.
3. 결과 확인
아래와 같이 정상적으로 파일이 실행된 결과 로그를 확인할 수 있다면 성공입니다 !
참고 레퍼런스
'개발 > ETC' 카테고리의 다른 글
어느 프로젝트에나 쉽게 적용 가능한 분산락 컴포넌트 개발 (feat. Spring) (0) | 2025.01.30 |
---|---|
트랜잭션 전파속성과 UnexpectedRollbackException (0) | 2024.08.11 |
도커로 젠킨스 설치, 설정 가이드 (0) | 2023.10.12 |
테스트코드에서 Lombok 사용하기 (0) | 2023.09.01 |
CORS와 SOP (0) | 2023.08.04 |
개발을 하며 만났던 문제들과 해결 과정, 공부한 내용 등을 기록합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!