[MySQL] csv import with CLI

dnslfkrh·2025년 1월 27일

윈도우에서 진행했다.

1. 사용할 데이터베이스 선택

mysql> use mydatabase;

2. 파일 이동 설정

show global variables like 'local_infile';

이걸 하면 아마 OFF로 표시될 것이다.

set global local_infile=true;

설정을 활성화해 준다.
(작업 이후 다시 false로 바꾸는 것을 추천: "mysql> set global local_infile=false;")

3. csv 파일 이동하기

사용할 csv 파일을 아래 경로로 이동

C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\

오류가 발생할 경우 MySQL 설정 파일에서 secure-file-priv 경로를 확인 후 적절히 경로를 변경한다.

4. sql 입력

필자는 mongodb에 저장되어 있던 데이터를 mysql로 마이그레이션해야 했기 때문에 아래와 같이 진행했다.

  • 기존 mongodb 스키마
const mongoose = require('mongoose');

const subsidiarySchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    introduction: {
        type: String,
        required: true
    }
});

const Subsidiary = mongoose.model('Subsidiary', subsidiarySchema);

module.exports = Subsidiary;
  • 추출한 csv 파일 (mongodb compass에서 csv로 추출)
_id(mongodb),name,introduction
<mongodb 고유 id>,<자회사명>,<한줄소개>
  • mysql 테이블 생성
CREATE TABLE subsidiaries (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    introduction TEXT NOT NULL
);
  • mysql 마이그레이션?
mysql> LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/main.subsidiaries.csv'
    -> INTO TABLE subsidiaries
    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
    -> IGNORE 1 ROWS     									# mongodb에서 자동 생성되는 고유 id(_id)를 제외.
    -> (@_id, @name, @introduction)							# _id는 마이그레이션 이후 필요 없는 필드.
    -> SET name = @name, introduction = @introduction;
  • 결과

효율적이지는 않은 것 같지만 데이터를 잘 가져왔다.

profile
안녕하세요

0개의 댓글