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 된 결과 화면
상세화면