윈도우에서 진행했다.
mysql> use mydatabase;
show global variables like 'local_infile';
이걸 하면 아마 OFF로 표시될 것이다.
set global local_infile=true;
설정을 활성화해 준다.
(작업 이후 다시 false로 바꾸는 것을 추천: "mysql> set global local_infile=false;")
사용할 csv 파일을 아래 경로로 이동
C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
오류가 발생할 경우 MySQL 설정 파일에서 secure-file-priv 경로를 확인 후 적절히 경로를 변경한다.
필자는 mongodb에 저장되어 있던 데이터를 mysql로 마이그레이션해야 했기 때문에 아래와 같이 진행했다.
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;
_id(mongodb),name,introduction
<mongodb 고유 id>,<자회사명>,<한줄소개>
CREATE TABLE subsidiaries (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
introduction TEXT NOT NULL
);
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;

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