티스토리 뷰

* 개요

- mysql dump 시에 ID 별로 분할해서 한 경우

- 모든 SQL 마다 DROP TABLE/CREATE TABLE 구문이 있는 경우 이걸 지워야 함.


* 애초에 dump 할때  --no-create-info 옵션 했으면 됐을것.


* 리눅스에서 DDL 빼고 실행하는 방법

 https://dba.stackexchange.com/questions/106843/mysql-how-to-restore-mysql-dump-sql-ignoring-drop-table-statement?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa



* 자바 코드

- 이 코드 실행시 sqlNoDdl 이란 확장자 가진 파일들이 생성됨

- CREATE, DROP 앞에 주석처리 -- 붙이는거

- CREATE TABLE 구문이 실행되지 않지만 주석처리 불안정해서 오류메시지 보임.

String sPath = "I:\\180405_Winuser백업\\180404_IrsPDB_sqlDump\\cio";


// 1. SQL 파일 목록 가져오기

File fDir = new File(sPath);

File[] afSql = fDir.listFiles(new FilenameFilter() {

// sql 파일만 가져옴

@Override

public boolean accept(File dir, String name) {

return name.matches(".*\\.sql");

}

});

// 2. // SQL 파일 마다 CREATE 에  / * 표시 

// drop table 에 -- 표시


int  cnt=0;

/**  DDL 어디까지 검사 ? */ 

int chkLimitLine = 40; 

for(File f : afSql) {

System.out.println(f);

// if(cnt >= 1) break;

File f2 = new File(f.getAbsolutePath()+"NoDdl");

BufferedReader br = new BufferedReader(new FileReader(f));

FileWriter fw = new FileWriter(f2);

String s;

int line=0 ;

while((s = br.readLine()) != null) {

if(line < chkLimitLine) { 

if(s.matches("^DROP TABLE.*") == true) {

s = s.replaceAll("^DROP TABLE", "-- DROP TABLE");

} else if(s.matches("^CREATE TABLE.*") == true) {

s = s.replaceAll("^CREATE TABLE", "-- CREATE TABLE");

}

// System.out.println(s);

} else { // 검사 한계 넘어가면 그냥 복사만 함.

}

fw.write(s +"\r\n");

line++;

}

br.close();

fw.flush();

fw.close();

cnt++;

}


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함