티스토리 뷰
* 개요
- mysql dump 시에 ID 별로 분할해서 한 경우
- 모든 SQL 마다 DROP TABLE/CREATE TABLE 구문이 있는 경우 이걸 지워야 함.
* 애초에 dump 할때 --no-create-info 옵션 했으면 됐을것.
* 리눅스에서 DDL 빼고 실행하는 방법
* 자바 코드
- 이 코드 실행시 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++;
}
'SW개발 > Database' 카테고리의 다른 글
[요약] MySQL 대용량 Restore(Import) (0) | 2018.04.28 |
---|---|
MySQL 8 VS MariaDB 10.2 / 3천만 대량 Row Restore 작업후기 (0) | 2018.04.26 |
특정 폴더의 SQL 모두 Restore 하는 배치 파일 만들기(자바) (0) | 2018.04.24 |
MySQL + MariaDB 같이 설치 (0) | 2018.04.24 |
MySQL 5.6 -> MariaDB 10.0 실패 (0) | 2018.04.23 |