PHP를 통해 자동으로 DB 백업하기

PHP 스크립트를 사용하여 자동으로 MySQL 데이터베이스 백업하기

DB를 백업하려면 phpMyAdmin에 접속하여 수동으로 백업을 받거나 웹호스팅에서 백업을 제공하는 경우 웹호팅에서 백업한 DB를 다운로드할 수 있습니다. 또는 워드프레스를 운영하는 경우 플러그인을 사용하여 백업할 수도 있습니다("워드프레스 백업/복원하기" 참고).

이와 다른 방법으로 자동으로 DB를 백업하도록 설정하는 방법도 생각해볼 수 있습니다. 인터넷을 검색해보면 다양한 스크립트가 검색될 것입니다. 저는 다음 github 사이트에서 제공하는 스크립트를 사용하여 php 스크립트로 자동으로 DB가 백업되도록 구성했습니다.

스크립트를 다운로드받은 다음 FTP를 통해 전체 파일을 업로드하도록 합니다. 예를 들어, [pocde]backup[/pcode] 폴더를 만들어 파일을 업로드할 수 있습니다.

그런 다음 config.sample.php 파일의 이름을 config.php로 바꾸고 이 파일을 열어서 편집하도록 합니다.

return array(
'backup_dir'    => 'D:/backup', // 백업 파일 경로
'keep_files'    => 50, // 저장할 파일 개수
'compression'   => '', // gzip, bzip2, etc, 압축 형식
'db_host'       => 'localhost',
'db_port'       => '3307', // DB 포트
'db_protocol'   => 'tcp',
'db_user'       => 'root', // DB 사용자 이름
'db_passwd'     => 'password', // DB 비밀번호
'db_names'      => array(
'some_db1',
'other_db2',
'tvdb',
'airdb'
)
);

파일을 열어보면 위와 같이 되어 있습니다. DB 정보를 적절히 수정하도록 합니다. 그리고 DB 포트도 확인하도록 합니다. 가령 이 블로그가 호스팅되고 있는 Bluehost의 경우 db_port는 3306입니다.

그리고 backup_dir를 설정해주어야 합니다. Bluehost에서는 다음과 비슷하게 설정하면 됩니다.

/home/xxxxxx/public_html/backup

config.php 파일에서 compression(압축) 부분의 설정도 적절하게 수정합니다(예: gzip). 그리고 해당 폴더(예: backup) 아래에 DB 이름과 동일한 폴더(예: /backup/db_name)를 하나 만들도록 합니다.

이제 Cron 작업을 구성하여 원하는 시간 간격으로 백업 파일이 생성되도록 합니다. Cron Job에 대한 내용은 "워드프레스에서 wp-cron.php 비활성화하여 사이트 속도 향상시키기" 부분을 참고해보시기 바랍니다.

DB 자동 백업

테스트를 해보면 위의 그림과 같이 db_name_날짜 형식으로 DB 파일에 해당 폴더에 저장됩니다.

위와 같은 방법이 번거로우면 워드프레스의 경우 플러그인을 사용하면 간편하게 DB를 백업할 수 있습니다. (이 블로그의 경우 DB가 너무 커서 플러그인으로 백업하면 실패하여 수동으로 백업을 받는 편입니다. 이런 경우 위의 방법을 사용하면 유용할 것 같습니다. 하지만 위의 방법을 사용하는 경우에도 정기적으로 한 번씩 수동으로 백업을 받아놓으면 더 안전하지 않을까 생각되네요.)


링크된 스크립트를 사용해도 db가 제대로 저장되지 않고 error.log에 디렉터리가 없다는 오류가 표시되었습니다. 스크립트를 만든 제작자에게 댓글을 남기려 해도 댓글 시스템이 작동하지 않아서 문의양식을 통해 질문을 보냈습니다. 질문을 보낸 후 금방 답변이 오네요. 잘 모르는 내용을 질문했을 때 금방 답변을 받으니 (스크립트를 공개해준 것만 해도 고마운데) 너무 고마웠습니다.

제 개인 이메일로도 간혹 도움을 요청하는 문의가 옵니다. 그러면 가급적 빨리 답변을 드리려고 노력합니다. 내용을 살펴보면 다급함이 느껴지는 경우가 종종 있습니다. 너무 바쁜 경우가 아니면 메일을 확인하는 즉시 답변을 했습니다만, 대부분 답변을 주면 아무런 반응이 없습니다.ㅠㅠ 잘 받았다든지, 혹은 제시된 방법이나 정보가 잘 작동하는지 혹은 잘 안 된다든지에 대한 아무런 응답을 받지 못하는 경우가 대부분입니다. 올해 들어 특히 그렇네요.

일부 글에 제휴 링크가 포함될 수 있으며 파트너스 활동으로 일정액의 수수료를 받을 수 있습니다.

4개 댓글

  1. 참고로 위에 소개한 DB를 자동 백업하는 PHP 스크립트 작성자의 Cron 작업 설정은 다음과 같다고 하네요:

    0 3 * * * /usr/bin/php /data/scripts/dbautobackup/backup_db.php >> /home/lysender/dbautobackup.log 2>&1

  2. 안녕하세요.

    갑자기 궁금한 점이 생겨서 유사하다고 생각되는 포스트에 궁금한 점을 문의 드립니다.

    워드프레스에서 블로그 메뉴를 이용해서 포스팅을 계속 하게 되면 지금 적어주신 것처럼

    DB에 쌓이게 될 텐데요.

    차후에 이 포스트들의 DB 들을 모아서 목적에 맞게 가공하는데는 큰 문제가 없을까요?

    예를 들면 저만의 메뉴얼을 만든다던지, 좀 더 나아가면 책을 만드는데 이용할 수 있을까요?

    전혀 지식이 없다보니 DB가 있다면 가능하기는 할 것 같은데 너무 막연하다 보니까

    기본적일 수도 있는 부분에 대해 문의를 드립니다.

댓글 남기기

* 이메일 주소는 공개되지 않습니다.