[Yauto_dbbackup.php 의 소스를 출력합니다. 최종 수정일 : 2006-11-29 12:28:22]
#!/usr/local/php/bin/php -q
<?php

/*제작자 : 유창화
사용제한 : 사용은 자유롭습니다. 단, 강의나 책의 내용으로서 사용될 경우 허락을 받으셔야 합니다.*/

@set_time_limit (0);
@
ini_set ('memory_limit''20M');

$dbhost '';//디비 접속 호스트명
$dbuser 'root';//디비 접속 유저
$dbpass '';//디비 접속 패스워드
$mysql_path '/usr/local/mysql/bin';//mysqldump 절대경로

$save_dir '절대경로/dbbackup';//저장할 장소, 절대경로/dbbackup 퍼미션은 777로 주세요
$dateYmdH date("YmdH");
$break_dbname '예외디비명1|예외디비명2';//디비백업에 열외시킬 디비들, 구분자!
$deldate 7;//삭제일 현재는 7일지난 데이터는 삭제

$connect mysql_connect($dbhost$dbuser$dbpass);
if (!empty(
$connect )) {

  echo 
"[백업한 sql] \n\n";
  
$db_list mysql_list_dbs();

  
$i 0;
  
$cnt mysql_num_rows($db_list);
  while (
$i $cnt) {

    
$dbname mysql_db_name($db_list$i);
    
$i++;

    if (!empty(
$dbname)) {

      if (!empty(
$break_dbname) && preg_match("`^(" $break_dbname ")$`i"$dbname))
        continue;

      echo 
"[ " $dbname "]\n";

      
exec($mysql_path '/mysqldump -h' $dbhost ' -u' $dbuser ' -p' $dbpass .' ' $dbname ' > ' $save_dir '/' $dbname $dateYmdH '.sql');
    }
  }


  echo 
"\n\n[삭제한 sql] \n\n";
  
$d dir($save_dir);
  while (
false !== ($entry $d->read())) {

    if (!
preg_match("|^\.|"$entry)) {

        if (!empty(
$break_dbname) && preg_match("`^(" $break_dbname ")[0-9]{0,10}\.sql$`i"$entry))
          continue;

        
$temp_file $save_dir '/' $entry;
        
$temp_mtime = @filemtime($temp_file);
        
$temp_during time() - $temp_mtime;

        if (
$temp_during > (60 60 24 $deldate)){
   
          
$temp_cnt++;
          @
unlink($temp_file);
          echo 
"[" $temp_file "]\n";
        }
    }
  }

  
$d->close();
}
else{

  echo 
"디비 정보가 맞는지 확인하세요\n";
}

exit;

?> 

[Yauto_dbbackup.php 의 소스를 출력합니다. 여기까지]



처리하는데 사용된 시간 : 0.0267

[요약]
mysql의 루트 권한을 가진 사용자가 모든 디비의 데이터를 한꺼번에 덤프받는 스크립트 입니다.


[사용법]
소스중에 #!/usr/local/php/bin/php -q 이부분은 자신의 php환경에 맞추어야 합니다.
소스중에 /usr/local/mysql/bin/mysqldump 이부분은 자신의 환경에 맞추어야 합니다.
이스크립트는 mysql 루트 권한이 있어야 사용가능합니다.
위 소스를 파일로 서버에 저장한 후 퍼미션을 755 로 주시기 바랍니다.


크론탭에 등록하는 방법
# crontab -e

30 */6 * * * 파일절대경로/dbbackup.php #6시간에 한번씩

라고 넣고 저장
6시간에 한번씩, 해당 시간의 30분에 실행됩니다.

위의 세팅 그대로 사용하면
하루에 4번, 7일동안 보관하므로
하나의 디비에 대해 총 28개의 백업sql이 존재하게 됩니다.


소스다운받기
전체보기