티스토리 뷰


자바로 백업모듈을 만들어야 했는데, 자바에서 pg_dump를 실행해 sql파일을 떨구는 일이다.

우리가 가져가고자 하는 백업 프로세스를 간단히 말하자면
전체백업은 하루에 한번, 특정 테이블 데이터는 데이터특성에 따른 주기별로 
1) 기존 백업스키마 데이터 삭제
2) 백업테이블 갱신
3) 백업스키마 sql 백업
4) DB 전체 sql 백업
순으로 이루어 진다.

기존에는 리눅스에 쉘스크립트 생성후 cron으로 돌려 파일백업, 전체백업을 진행했는데 이번에는 자바모듈안에서 해결했으면 좋겠다고 하셨다. 백업모듈은 데몬으로 돌아야하는데, 이렇게 실행하나 저렇게 실행하나 데몬역할을 하는거라고 보면 된다고 하셨는데, 서비스로 띄우는것과 약간 차이가 있지 않나 더 알아봐야 할 것 같다.

이 작업을 하기 위해 자바에서 커맨드명령어를 날려 pg_dump를 실행하는 방법을 찾아보았고, 

아래 stackoverflow를 통해 해답을 얻을 수 있었다. 8년전 글이기 때문에, 지금 자바에서 pg_dump를 연동하려면 더 나은 방법이 있을지도 모르겠다. 

 

How to backup a postgres database using java

this is the code I am using to back up my database using pg_dump 9.3 in java. The problem I have is that always the result file is empty, and the exit code is 1, any ideas? public static void back...

stackoverflow.com

테스트하는 로컬서버는 윈도우고, 개발서버, 운영서버는 리눅스 이기 때문에 위와같이 로컬테스트 진행 후
리눅스에도 서비스를 띄워 sql파일 백업이 잘 진행되는지 확인해보았다.

pg_dump를 실행시키는 것이기 때문에, 경로를 잘 지정해주어야 한다.
개발, 운영 환경에 맞게 설정파일로 분리하는것이 좋다.

윈도우 pg_dump 경로

database.pgdump.path=C:\\Program Files\\PostgreSQL\\10\\bin\\pg_dump.exe

리눅스  pg_dump 경로

database.pgdump.path=/usr/pgsql-10/bin/pg_dump

 

또한 전체 파일 백업과, 특정 테이블을 지정하여 sql백업을 받을 수 있다.

pb = new ProcessBuilder(
        dbPgdumpPath, // C:\Program Files\PostgreSQL\10\bin
        "--host", dbHost,
        "--port", dbPort,
        "--username", dbUsername,
        "--no-password",
        "--format", "custom",
        "--blobs",
        "--verbose",
        "--file", fileName);

-t 옵션으로 특정 테이블 지정이 가능하고, --encoding 옵션으로 인코딩포맷 지정이 가능하다.

pb = new ProcessBuilder(
        dbPgdumpPath, // C:\Program Files\PostgreSQL\10\bin
        "--host", dbHost,
        "--port", dbPort,
        "--username", dbUsername,
        "--no-password",
        "--format", "custom",
        "--blobs",
        "--verbose",
        "--encoding", "UTF-8",
        "--file", fileName,
        "-t", tableNm);

백업파일명을 생성할 땐 주로 백업날짜를 붙여 파일명을 생성하니, 그 부분도 신경써주는 것이 좋다.

// 현재 날짜
LocalDate today = LocalDate.now();
// 파일 이름에 포맷을 지정, 오늘 날짜를 포함
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");

현재 날짜 생성 후 fileName 생성시 붙여주면 

fileName = dbBackupPath + tableNm + "_backup_" + today.format(formatter) + ".sql";

백업파일생성

파일이 잘 떨어지는 것을 확인할 수 있다.


추가로, 인텔리제이에서 작업시, pg_dump수행 중에 한글이 깨지는 현상이 발생했는데
프로세스의 환경 변수 맵에 LANG 설정을 해주면 한글이 정상 출력 되는 것을 확인할 수 있다.

final Map<String, String> env = pb.environment(); // 프로세스의 환경 변수 맵
env.put("PGPASSWORD", dbPassword);
env.put("LANG", "en_US.UTF-8");

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함