xpressengine(XE) 게시판에 파일 기반으로 된 data 자동으로 DB에 Insert 시키는 팁


XE  : version: 1.7.4.1 (XE 버전별 DB 컬럼이나 테이블 항목 차이는 있을수 있음)

OS : CentOS release 6.5 (Final) 에서 진행됨

DB : mysql  Ver 14.14 Distrib 5.5.38, for Linux (x86_64) using readline 5.1


요약 :


1) 새로운 게시판 생성 / 사용자 정의 이름 변수명 인지


2) 텍스트 형태로 신규 게시판에 밀어넣을 data 생성 /  "사용자 정의 변수" 각 필드에 부합되는 내용으로


3) DB 에서 중요한 부분 확인 ( document_srl , module_srl 번호 등)


4) Script 작성 및 실행 ( 3)번 내용을 잘 확인하여 스크립트에 대입)




1. xe 게시판 관리자에서 아래와 같이  "사용자 정의" 변수로 새로운 게시판 생성






2. cat list 파일 설명


- list 파일 내용은 , 로 구분 총 11개의 필드로 구성 (사용자 변수 타입에 맞게 대입 총 11개)


- 엑셀로 편집하여 -> vi list 복사-> :1,$ s/탭/,/g  (탭구분을 -> , 콤마로 변경)  


- sed -i 's/ //g' list  (list 파일 내용중 "빈칸제거") 

  (업 체명 or 업체 명  <- 빈칸이 들어가면 스크립트 실행시 제대로 import 되지 않음 )


업체명㈜,123456789,.,운영,.,HOST-HV-HSOL2,10.77.10.207,4,16,600,.
(주)업체명,123456789,.,운영,2,HOST-HV-BUU,10.77.10.246,4,16,300,.
.
.
.
.
.
.
.
한국업체명,123456789,.,해지,2,HOST-HHBT,10.205.14.12,4,16,1000,.
업체명가나다㈜,123456789,.,운영,2,HOST-DSTH,10.205.14.13,4,8,300,.



3. Mysql DB 확인 (data insert 스크립트 내에 사용될 컬럼 정보임)


- xe_documents 테이블 


- document_srl 컬럼 마지막 번호 (매우 중요) 아래서 설명 예정

  103009


- module_srl 컬럼  (1번에서 생성한 게시판 모듈 번호)

  101354


위 내용은 xe 로직상 모든 게시판 document(게시물) 에 대하여  자동으로 계산되어 부여되는 시리얼 번호 

(xe_sequence 테이블 , xe_documents 및  document_srl 컬럼과도 관계가 있다고함)


자세한 내용은 xpressengine 공식 홈페이지 참조




  



4. Script  내용 및 실행


- 1번에서 설정한 사용자 변수별로 list  파일에서 읽어서 ->  mysql 명령으로 -> insert 


- 중요 사항 


          module_srl  ->  3번에서 확인한 101354

          document_srl -> 3번에서 확인한 마지막 값보다 무조건 크게 입력 ( 필자는 100정도 이상 크게줌)

          var_idx -> 1번에서 사용자 변수별 가장 첫번째 항목  (사용자 정의 변수별로 각각 맞춰 줘야함)


    이유

          스크립트 실행시 insert error 및 

          Duplicate entry ‘0’ for key ‘PRIMARY' 라는 에러를 뿌리면서 글작성이 안됨.

          그리고 기준 운영중인 게시판에도 영향을 미칠수 있음


         



#!/bin/bash -x


hosting_company=`awk -F "," '{print $1}' ./list`
hosting_serial=`awk -F "," '{print $2}' ./list`
hosting_status=`awk -F "," '{print $4}' ./list`
hosting_product=`awk -F "," '{print $3}' ./list`
hosting_date=`awk -F "," '{print $11}' ./list`
hosting_sname=`awk -F "," '{print $6}' ./list`
hosting_ip=`awk -F "," '{print $7}' ./list`
hosting_cpu=`awk -F "," '{print $8}' ./list`
hosting_memory=`awk -F "," '{print $9}' ./list`
hosting_hdd=`awk -F "," '{print $10}' ./list`
hosting_sql=`awk -F "," '{print $5}' ./list`




### hosting_company


NUM=103100             <-- xe_documents 테이블 document_srl 컬럼 마지막 번호 보다 큰값  자동으로 1씩 증가하게 


for i in ${hosting_company}
do
let NUM=NUM+1
hosting_company=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe`.`xe_documents` (`document_srl`, `module_srl`, `category_srl`, `lang_code`, `is_notice`, `title`, `title_bold`, `title_color`, `content`, `readed_count`, `voted_count`, `blamed_count`, `comment_count`, `trackback_count`, `uploaded_count`, `password`, `user_id`, `user_name`, `nick_name`, `member_srl`, `email_address`, `homepage`, `tags`, `extra_vars`, `regdate`, `last_update`, `last_updater`, `ipaddress`, `list_order`, `update_order`, `allow_trackback`, `notify_message`, `status`, `comment_status`) VALUES ("'${NUM}'", "101354", "0", "ko", "N", "Title", "N", "N", "", "0", "0", "0", "0", "0", "0", NULL, "admin", "admin", "admin", "4", "useruser@xxx.com", "", NULL, "N;", "20170629110002", "20170629110002", NULL, "10.10.20.7", "-'${NUM}'", "-'${NUM}'", "N", "N", "PUBLIC", "ALLOW");


INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","1","ko","'${hosting_company}'","hosting_company");'   


  # var_idx 번호 중요




done


       #     붉은색 부분을 명확하게 확인후 기입 


### hosting_serial


NUM=103100


for i in ${hosting_serial}
do
let NUM=NUM+1
hosting_serial=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","2","ko","'${hosting_serial}'","hosting_serial");'


done


###


### hosting_status


NUM=103100


for i in ${hosting_status}
do
let NUM=NUM+1
hosting_status=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","3","ko","'${hosting_status}'","hosting_status");'


done


###


### hosting_product


NUM=103100


for i in ${hosting_product}
do
let NUM=NUM+1
hosting_product=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","4","ko","'${hosting_product}'","hosting_product");'


done


###


### hosting_date


NUM=103100


for i in ${hosting_date}
do
let NUM=NUM+1
hosting_date=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","5","ko","'${hosting_date}'","hosting_date");'


done


###


### hosting_sname


NUM=103100


for i in ${hosting_sname}
do
let NUM=NUM+1
hosting_sname=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","6","ko","'${hosting_sname}'","hosting_sname");'


done


###


### hosting_ip


NUM=103100


for i in ${hosting_ip}
do
let NUM=NUM+1
hosting_ip=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","7","ko","'${hosting_ip}'","hosting_ip");'


done


###


### hosting_cpu


NUM=103100


for i in ${hosting_cpu}
do
let NUM=NUM+1
hosting_cpu=`echo $i`


mysql -uroot -p'PasworD' xe -Bse 'INSERT INTO `xe_document_extra_vars`(`module_srl`, `document_srl`, `var_idx`, `lang_code`, `value`, `eid`) VALUES ("101354","'${NUM}'","8","ko","'${hosting_cpu}'","hosting_cpu");'


done


            위와 같은 형식으로 "사용자 정의 이름" 별로 스크립트 내용 추가
.
.
.
.
.
.





10,000 줄 이상 입력시에도 DB나 서버 부하 없이 잘 insert 됨 



5. 결과 화면


  스크립트 실행후 자동으로 data 가 insert 된 결과 화면 




상세화면 


 
댓글은 로그인 사용자만 작성 가능합니다. 로그인하기