웹서버 분류

Mysql 백업을 드랍박스에 하기

컨텐츠 정보

  • 16,934 조회
  • 4 댓글
  • 0 추천
  • 목록

본문

지난 번에 오드로이드 백업 및 드랍박스 업로드 자동 스크립트 만들기를 올렸었는데요,


웹서버에서 중요한 데이터베이스 백업은 못하고 있었습니다.


웹서버 안에 있는 파일도 중요하지만, 데이터베이스가 날아가면 그 파일들이 쓸모가 없어지기 때문에


데이터베이스의 백업도 정말 중요한 작업입니다.


그래서 구글 검색해보니 우리나라에서 검색 결과는 잘 안보여, 작성하게 되었습니다.



레퍼런스는 관련링크1에 있으니 참고바랍니다.


백업 스크립트의 특징은 sh파일이 아닌 php 로 작성하는 것입니다. (스크립트로 하시려면 새로 작성한 두번째 방법을 참조하세요. 링크)


sh파일을 수정해서 DB를 백업하면 좋지만... 제가 그정도 수준은 아니라(ㅠㅠ) php버전으로 소개해드립니다.


그래도 지난 강좌에 쓰였던 드랍박스API 설치가 필요없어 DB만 백업하려면 이렇게 분리하는 것도 좋아보입니다.


거두절미하고 바로 PHP파일을 작성합니다.


울트라에디터나 editplus 같은 편집기로 작성해야 에러가 적습니다.




/**
 * Quickly and easily backup your MySQL database and have the .tgz copied to
 * your Dropbox account.
 *
 * Copyright (c) 2012 Eric Silva
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @author Eric Silva [eric@ericsilva.org] [http://ericsilva.org/]
 * @version 1.0.0
 */


require('DropboxUploader.php');


// location of your temp directory
$tmpDir = "/임시저장소/";
// username for MySQL
$user = "MYSQL아이디";
// password for MySQL
$password = "MYSQL비밀번호";
// database name to backup
$dbName = "백업하고싶은DB이름";
// hostname or IP where database resides
$dbHost = "localhost";
// the zip file emailed to you will have this prefixed
$prefix = "db_";


// username for Dropbox
$dropbox_user = "드랍박스아이디";
// password for Dropbox
$dropbox_password = "드랍박스비밀번호";
// Destination folder in Dropbox (folder will be created if doesn't yet exist)
$dropbox_dest = "db_backups";


// Create the database backup file
$sqlFile = $tmpDir.$prefix.date('Y_m_d').".sql";
$backupFilename = $prefix.date('Y_m_d').".tgz";
$backupFile = $tmpDir.$backupFilename;


$createBackup = "mysqldump -h ".$dbHost." -u ".$user." --password='".$password."' ".$dbName." > ".$sqlFile;
//echo $createBackup;
$createZip = "tar cvzf $backupFile $sqlFile";
//echo $createZip;
exec($createBackup);
exec($createZip);


try {
    // Upload database backup to Dropbox
    $uploader = new DropboxUploader($dropbox_user, $dropbox_password);
    $uploader->upload($backupFile, $dropbox_dest,  $backupFilename);
} catch(Exception $e) {
    die($e->getMessage());
}


// Delete the temporary files
unlink($sqlFile);
unlink($backupFile);


?>



위에 한글로 적은 부분은 반드시 자신의 웹서버에 맞게 수정해야 합니다.


수정 후 원하는 이름으로 저장하면 됩니다. (ex - dbbackup.php - 첨부파일에 첨부)


그리고 DropboxUploader.php파일도 위에서 만든 파일과 같은 경로에 넣어야 합니다.


https://github.com/jakajancar/DropboxUploader


위 링크에 들어가서 오른쪽 제일 밑에 Download ZIP을 클릭하여 받거나, 첨부파일을 받으면 됩니다.


이제 두 파일을 원하는 위치에 넣습니다.


저는 /usr/bin/ 에 넣어줬습니다.



이제 cron을 이용하여 자동으로 백업하게 해야합니다.


sh의 경우 간단하게 되지만 php파일의 경우 usr/bin에 있는 php 모듈을 확인해야 합니다.



위 스샷처럼 php파일이 어떤 이름을 가지는지 확인 후 cron 명령어를 넣어주면 됩니다.


1 4 * * * /usr/bin/php5 -q /usr/bin/dbbackup.php


수정) 로그가 기록이 안되어, 로그 기록 부분을 삭제했습니다.

저는 usr/bin에 두 파일을 넣어뒀고, 모듈 이름이 php5라는 것을 확인 후 위와 같이 설정해줬습니다.

매일 오전 4시 1분에 작업을 하게 됩니다.


그리고 제일 위에 php에 보시면 웹서버에서 드랍박스로 백업 후, 기존의 로컬 백업파일은 지우는데

전 혹시나 드랍박스도 날아갈까봐, 로컬 부분은 지우지 않도록 했습니다.

php 부분의 제일 밑줄 

unlink($backupFile);


//unlink($backupFile);

이렇게 바꿔줬습니다.

그럼 임시저장소에 살아남게 됩니다.

보통 임시저장소를 /tmp 로 넣는데, 전 네트워크 드라이버의 특정 폴더에 넣게 해뒀습니다.

그러면 드랍박스가 날아가도 로컬 파일은 살아있게 되므로 큰 걱정은 없어도 됩니다.

마지막으로 DB를 로컬에 저장하면 쌓이게 되는데, 지난번 스크립트처럼 일정 갯수가 넘어가면

지우는 방법을 연구 중에 있습니다. 알게되면 추가하도록 하겠습니다.



※ 2013/11/13  스크립트로 업로드하는 방법을 추가했습니다.


Mysql 백업을 드랍박스에 하기 두번째 방법

관련자료

댓글 4

우성군님의 댓글의 댓글

가이드 번역정도로 보시면 될 것 같습니다 ㅎ

보통 구글링하면 다 나오니 처음 접하시는 분들은 한글이 편하니깐요.

테베님의 댓글

파일백업을 하실때 이용하셨던 sh를 약간 수정하시면 조금더 쉽지 않을까? 합니다
# directory to place Mysql backups
MYSQLBACKUPDIR=mysql백업할 폴더경로
# file name YYYY-MM-DDHH:MM:SS.sql
BACKUPNAME=`date +%F%T`
# remove dashes and colons from file name
BACKUPNAME=${BACKUPNAME//[-|:]/}
# number of sets to keep
NUMSETS=3
#MYSQL backup 전체 MYSQL을 뜨는 명령어입니다 개별 디비만 뜨는건 -A --add-drop-table를 DB명으로 바꾸시면 됩니다.
mysqldump -u아이디 -p비밀번호 -A --add-drop-table > $MYSQLBACKUPDIR/$BACKUPNAME.sql\
# delete older files greater than $NUMSET
cd $MYSQLBACKUPDIR
LINS=$((NUMSETS + 1))
if [[ $(ls $MYSQLBACKUPDIR | wc -l) > $NUMSETS ]]
then
        stat -c "%Y %n" * | sort -rn | tail -n +"$LINS" | \
        cut -d ' ' -f 1 --complement | xargs -d '\n' rm
fi
#드랍박스 업로드 부분은 생략했습니다.
전체 43 / 4 페이지
RSS

최근글


새댓글


알림 0