dbDump.php 파일 완성하는데 우분투와 리눅스에서 /usr/bin 폴더 지정해주는 게 다르네요. 블록

제로보드4 게시판을 사용하면서 관리자모드에 내장돼 있는 "DB 백업" 기능을 이용하게 되는데 아쉽게도 이건 제로보드 게시판 전용이라 매번 mysql에 있는 데이타베이스 전체 테이블을 백업하는게 여간 귀찮은 게 아니었습니다. 그래서 이번에 이 dbDump.php 파일을 손보게 되었습니다. 일단 bbs/admin_setup_bac.php 파일 26행 쯤을 아래와 같이 바꿔주고 bbs/admin/dbDump.php 파일 끝에 all_Backup() 이란 함수를 두번째 소스와 같이 추가해 주면 됩니다. 여기서 주의할 점은 서버가 리눅스라면 basedir 이 "/usr/" 이 되기 때문에 두번째 소스의 30행 쯤에서 "bin/" 이 맞고 우분투라면 basedir 이 "/usr" 이 되기 때문에 "/bin/" 이 맞는다는 겁니다. 전 처음에 우분투 웹서버에서 .sql이 생성이 안돼 그 이유를 몰랐는데 궁구해보니 이런 차이점이 존재하고 있었더군요. 여러분들도 참고하시기 바랍니다.

아래와 같이 소스를 고쳐주면 제로보드4 게시판 관리자 모드에서 "DB 백업" 을 클릭했을 때 먼저 해당 DB 전체 테이블을 덤프한 .sql 파일이 루트 디렉토리에 생성이 되고 다음 "다른 이름으로 저장" 이 뜨면서 제로보드에서만 사용하는 전용 테이블을 덤프한 파일이 클라이언트 컴퓨터에 저장되게 됩니다.

[bbs/admin_setup_bac.php]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// DB 백업일때
if($member[is_admin]==1&&$exec=="db_dump") {
    set_time_limit(0);
    include "admin/dbDump.php";
    $dbData = file("myZrCnf2019.php");
    $host = trim($dbData[1]);
    $user = trim($dbData[2]);
    $password = trim($dbData[3]);
    $dbname = trim($dbData[4]);
    $filename = $dbname."_".date("Ymd").".sql";
    all_Backup($host,$user,$password,$dbname,$filename);
    zbDB_Header($filename);
    zbDB_All_down($dbname);
    exit();
}
?>

[ bbs/admin/dbDump.php]
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
32
33
34
<?php
function all_Backup($host,$user,$password,$dbname,$filename) {
    $db = mysql_connect($host,$user,$password) or die(mysql_error());
    $connect = mysql_select_db($dbname,$db) or die(mysql_error());
 
    session_start();
    $HTTP_SESSION_VARS[HOST]=$host;
    $HTTP_SESSION_VARS[DB]=$dbname;
    $HTTP_SESSION_VARS[ID]=$user;
    $HTTP_SESSION_VARS[PW]=$password;
 
    $myhost=$HTTP_SESSION_VARS[HOST];
    $mydb=$HTTP_SESSION_VARS[DB];
    $myid=$HTTP_SESSION_VARS[ID];
    $mypw=$HTTP_SESSION_VARS[PW];
 
    $connect=mysql_connect($myhost,$myid,$mypw) or die("sql erroe");
    mysql_select_db($mydb,$connect);
 
    header("Content-disposition: filename=$filename");
    header("Content-type: application/octetstream");
    header("Pragma: no-cache");
    header("Expires: 0");
 
    $pResult=mysql_query("show variables");
 
    while($rowArray=mysql_fetch_row($pResult))
    {
        if($rowArray[0]=="basedir")
            $bindir=$rowArray[1]."bin/";
    }
    passthru($bindir."mysqldump --user=$myid --password=$mypw $dbname > ../$filename");
}
?>

덧글

  • 희망의빛™ 2014/11/29 13:02 # 답글

    그래서 이렇게 소스를 변경하면 호스팅 업체에서 제공하는 DB 백업을 할 필요가 없고 Data 백업만 정기적으로 한번 해주면 됩니다.
  • 희망의빛™ 2014/11/29 13:19 # 답글

    덤프한 파일을 복원할 때는 덤프된 파일의 한글 코드에 유의해서 복원하세요. 이게 어긋나 버리면 한글이 온통 깨져 나온답니다. 보통 DB에 저장된 한글이 euckr 이라고 하더라도 덤프된 파일은 utf-8로 저장이 되는데 다른 이름으로 저장을 해서 euckr로 변환 후 저장해야 올바로 restore된 한글이 보인답니다.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


웹로그 검색