<?
  $users = array('123','456','789');       // 백업할 데이터베이스명를 배열에 넣음
  $users_count = sizeof($users)-1;    // 유저배열의 크기를 구해옴

  $backup_dir = "/blah/mysql/dump/";  // 백업파일(.sql)이 들어갈 디렉토리
  $backup_tardir = "/blah/mysql/archives/";    // 1주일 단위로 백업할 .tar.gz 파일이 들어갈 디렉토리
  $admin_id = "root";         // 관리자 ID
  $adminpass = "blah";      // 관리자 패스워드
  $backup_date = date("Ymd"); // 백업날자 구해옴
  $tar_date = "Tue";          // tar.gz 로 압축할 요일 (Sun, Mon, Tue, Wed, Thu, Fri, Sat) 기입

  $cp_user = "blahuser";        // 백업 파일 복사시킬 유저명 (한 유저만 접근 가능하게 고치기 위해 필요)
  $cp_user_dir = "/home/blahuser/backup";       // 외부 전송 편의를 위한 복사할 일반 유저 디렉토리

  for ($i=0; $i<=$users_count; $i++) {
       exec("mysqldump -u".$admin_id." -p".$adminpass." ".$users[$i]."> ".$backup_dir.$users[$i]."-".$backup_date.".sql");
  }

  if (date("D") == $tar_date) {       // 요일이 tar.gz 로 백업할 요일과 일치할 경우
       exec("cp ".$backup_dir."*".$backup_date.".sql ".$cp_user_dir);
       exec("tar cvfz ".$backup_tardir.$backup_date.".tar.gz ".$backup_dir."*.sql");
           // 일주일치가 백업되어 YYYYMMDD.tar.gz 형식으로 파일이 나옴
           // $tar_date 가 "Mon"일 경우 지난주 화요일부터 월요일까지가 .tar.gz 에 들어감
           // for 문과 위치를 바꿀 경우에는 지난주 월요일부터 일요일까지 .tar.gz 에 들어감
       exec("rm -rf ".$backup_dir."*.sql");    // YYYYMMDD.tar.gz 에 들어간 sql 파일 지움

       exec("cp ".$backup_tardir.$backup_date.".tar.gz ".$cp_user_dir);
  }

  exec("chmod 400 ".$backup_dir." -R");       // 백업 디렉토리 부터 하위까지 400 으로 바꿈
  exec("chmod 400 ".$backup_tardir." -R");    // .tar.gz 파일이 들어갈 디렉토리 부터 하위까지 400 으로 바꿈

  if(date("D") != $tar_date)
       exec("cp ".$backup_dir."*".$backup_date.".sql ".$cp_user_dir);

  exec("chown ".$cp_user." ".$cp_user_dir." -R");     // 백업파일을 정해진 유저에게 복사하고 소유권을 정해진 유저로 바꿈
  exec("chmod 700 ".$cp_user_dir." -R");      // 백업파일 복사한 유저 디렉토리 하위까지 700 으로 바꿈
?>
2006/06/19 22:53 2006/06/19 22:53

Trackback :: 이 글에는 트랙백을 보낼 수 없습니다