본문 바로가기
DATABASE/MariaDB

[MariaDB] SQL 파일 실행 - 대용량 insert 문

by DANEW 2023. 7. 17.

Intro

안녕하세요.

초보 DBA 다뉴입니다.

 

요번에 2000만 row가 넘는 데이터를 insert를 해야하는 일이 생겼는데요.

평범하게 받았으면 뭔가 평소처럼 작업했을 텐데...

전달받은 파일이 .sql 파일이였습니다. sql 파일의 크기부터가 4GB가 훨씬 넘었는데요.

 

파일이 DBMS에서도 안열리고... 수정해도 저장도 안되고... 이리저리 방법을 찾다보니

sql 파일을 다이렉트로 실행하는 방법이 있었습니다.

 

그 방법에 대해서 한번 알아보죠.


알아두기

SQL 파일

SQL 파일은 쿼리문으로 이루어진 파일입니다.

저장 확장자부터가 sql인 만큼 기본적으로 텍스트 형식으로 되어있으며,

DBMS 혹은 텍스트 편집기를 통하여 열어볼 수 있습니다.

작업해야 할 SQL 파일 내용

전달받은 것은 SQL 파일뿐이였는데요.

열어보니 Multi Values Insert 문이 들어 있었습니다.

-- Multi Values Insert Query
insert into [Table_Name] (column 1, column 2, ...... column n)
       values (value 1, value 2, ...... value n),
              (value 1, value 2, ...... value n),
              (value 1, value 2, ...... value n)
              ....
              (value 1, value 2, ...... value n);

대략 텍스트 편집기로 row 수를 보니 2000만 건 정도 되었는데요.

DBMS정보나 테이블의 컬럼 정보등이 없어서... 데이터를 한참 훑어봤네요!


실제 작업

선행 작업 1 (Create Table)

전달 받은 SQL 파일에는 Multi Values Insert 문이 들어있었는데요.

우선 Insert 문을 실행 하려면, 해당 데이터가 담길 테이블이 있어야 합니다.

반응형

따로 Database, Table Sepc을 받지 못하여, 전달받은 SQL 파일을 열어 쭉 훑어봤는데요.

이리저리 훑어보고 DBMS 특징(테이블이나, 컬럼명)을 MySQL / MariaDB 로 특정 지었고 (`Table_Name` 과 같은 표기)

컬럼의 데이터 타입 및 길이에 대해서 잘리지 않을 정도로 여유롭게 잡아 테이블을 생성하였습니다.

선행 작업 2 (Move File)

제가 데이터를 Insert 할 MariaDB는 로컬이 아닌 원격지 리눅스 Server인데요.

SQL파일을 실행 하기 위해서는 원격지에서의 파일 실행은 불가능 하다고 합니다.

 

따라서, 원격지 리눅스에 원하는 위치에 FTP를 통하여 파일을 전송 하였습니다.

FTP설정이 안되어있었으면 또 설정하느라 하루종일 걸렸을 것 같네요.

SQL 파일 실행 (Insert)

자 이제 실행할 SQL 파일도 해당 서버에 옮겨놨고 바로 작업을 시작하였는데요.

 

원격지에서 MariaDB에 접속합니다.

mysql -u root -p

MariaDB 접속

Table 이 생성되어 있는 (데이터를 넣을) Database에 접속합니다.

-- Database connect
use [Database Name];

SQL 파일을 실행합니다.

source [SQL파일 경로/SQL파일명.sql]

-- 예시
-- source /root/file/sqlfile.sql

Insert 중인 Query

Insert가 매우 잘 되는 모습을 보았습니다.

이렇게 데이터를 무사히 잘 넣었습니다!

요약

작업의 순서대로 이리저리 길게 써봤는데요.

요약을 하자면 이렇게 될거같네요.

  1. 실행하고자 하는 서버에 SQL파일 위치시키기
  2. MariaDB에서 실행하고자 하는 SQL 문 실행 (source file.sql)

Outro

저는 Insert 하는 Query를 실행하였는데요.

Insert가 아닌 다른 Query를 포함하는 SQL파일의 경우에도 각각 상황에 맞게 잘 사용 할 수 있을 것 같네요.

 

덕분에 쉽게 데이터를 넣게되어 매우 기분이 좋습니다.

물론... 저는 위에 Insert 한 데이터를 MsSQL에서 작업을 해야하므로,

MariaDB To MsSQL 에 대한 Migration 을 진행해야 할텐데요.

이건 MariaDB의 Connect Engine을 활용하여, 데이터를 이동 시킬 계획입니다.

 

다음에 또 시간이 된다면, MySQL / MariaDB 의 Connect Engine 사용법에 대해서도 이야기 나눠 보도록 하겠습니다.

 

감사합니다.

반응형