VPS를 운영하다보니 예기치 않은 사태에 직면하곤 합니다.
오늘 백업을 받지 않고 겁없이 새로운 프로그램을 설치하다 인터넷 사이트가 먹통이 되었습니다.
memcached 가능을 추가하기 위해 apt-get install -y php-memcached 명령을 주고 설치까지는 무사히 끝났는데 그 이후 많은 에러를 뿜어내면서 접속 불가가 되네요..
이제는 이런 상황이 와도 당혹스럽지는 않더군요.
어떻게 해결 방법이 있겠지하면서..
1. 인터넷 접속 불가 시 DB 백업 방안을 찾아라
사이트가 먹통이 되고 이게 쉽게 복구될 기미가 보이지 않자 DB를 백업하고 시스템을 복원하기로 했습니다.
-
시스템은 며칠 전 스냅샷이 있어서 이를 활용하가로 하고
-
이후 업데이트 내용은 DB 백업을 토대로 복구하기로 한것이죠..
그런데 인터넷 접속불가되면서 phpMyAdmin 접속도 않되더군요.. 예전에 하던 방식이 통하지 않으니 슬슬 겁이나기도하고
인터넷 접속이 안되어 mysql을 사용할 수 없다면 DB를 조작하는 다른 방법이 있지 않을까요?
그래서 또 방법을 찾아보니 서버에 접속해 command line에서 명령어를 입력해 백업받는 방안을 찾아 적용했습니다.
전문가분들에게는 아무것도 아니지만 초보 입장에서 기록하는 기분으로 정리해 봅니다. 제 스스로의 참고자료를 겸해서
아래는 사이트 접속이 되지 않아 phpMyAdmin을 사용하지 않고 서 DB를 백업받는 방안입니다.
2. phpMyAdmin 사용하지 않고 Marian DB나 mysql DB 백업하기
사이트 접속이 않되면 SFTP나 Telnet으로 접속해 방안을 찾아봐야 합니다.
여기에서 사용하는 것은 telnet으로 접속해 먕령어로 DB를 백업받는 방안입니다.
Marian DB(마리안디비)나 mysql DB(마이네스큐엘디비)아직까지는 한가지와 마찬가지로 동일한 명령을 사용할 수 있습니다.
mysql DB 백업은 mysqldump 명령어를 사용합니다.
2.1. 개별 DB 백업 방법
아래는 DB를 개별적으로 백업 시 사용하는 명령어입니다.
mysqldump -u [사용자] -p [백업할 DB명] > [백업 파일명].sql
mysqldump -u root -p pass DBname > /home/mysite/backup.sql
- root 에 db계정명을 적습니다.
- pass 부분에 mysql 비밀번호를 적습니다. 비밀번호를 적지 않고 넘어가면 mysqldump 명령어 수행시 비밀번호를 물어봅니다.
- dbname 부분에 db명을 적습니다,
- backup 부분에 백업할 폴더 위치 및 파일명을 적습니다.
2.2. mysql 전체 DB 백업
아래는 DB 전체를 통째로 백업하는 방법입니다.
mysqldump -uroot -p -A > backup.sql
혹은
mysqldump -uroot -p --all-databases > backup.sql
2.3. 특정 db, 특정 테이블 또는 schema 정보만 백업
wp라는 특정 DB만 백업합니다.
mysqldump -uroot -p wp > wp.sql
다음은 wp 데이터베이스의 contents 테이블만 백업합니다.
- DB명이 wp인 경우
- contents 테이블을 백업하시오
mysqldump -uroot -p wp contents > wpcontents.sql
아래는 mysql schema 정보만 백업하는 경우입니다.
mysqldump -uroot -p --no-data schemainfo > schemainfo.sql
3. 백업받은 DB 복원
백업한 db를 복원하는 방법입니다.
mysql -u [사용자] -p [복구할 DB명] < [백업 파일명].sql
mysql -u root -p wp < wpbackup.sql
4. 자동 백업하도록 만들기
자동 백업할 폴더를 만들거나 지정한다.
backup폴더를 만들자
mkdir /backup
자동 백업할 폴더를 만들거나 지정한다.
/backup폴더에 755 권한을 부여하자
chmod 755 /backup
자동 백업 Shell 프로그램 작성
자동으로 백업이 이루어지도록 sh 프로그램을 만든다.
#!/bin/sh
# 백업 위치는 /backup, 백업 시간은 년-월-일 형식으로 지정
DATE=`date +"%Y%m%d%H%M%S"`
# 사용자 계정과 비밀번호
USERNAME="MySQL계정"
PASSWORD="비밀번호"
# 백업할 데이타베이스
DATABASE="wp"
# 백업 작업
mysqldump -u$USERNAME -p$PASSWORD $DATABASE > /backup/wp_bak_${DATE}.sql
자동 백업 Shell 프로그램의 권한 부여
자동 백업 Shell 프로그램이 제대로 작동하도록 700권한을 부여합니다.
chmod +x /backup/wpbackup2.sh
크론탭에서 자동 실행 명령
일정 시간에 자동 백업되도록 크론(cron)을 만듭니다.
매일 5시 30분에 자동실행되도록 crontab을 수정합니다.
cd /etc/crontab
vi /etc/crontab
30 5 * * * root /backup/wpbackup2.sh # 매일 5시 30분 실행 명령어 입력
/etc/init.d/cron restart # 크론 데몬을 재 실행토록 합니다.
시스템 재시작 시 스크립트가 실행되도록 설정
시스템이 재시작은 중요한 액션이 시작되는 것이므로 백업을 실행하도록 합니다.
vi /etc/rc.local
/backup/wpbackup2.sh
5. 마치며
서버를 운영하다보면 생각보다도 많이 DB를 백업받아야 할 일들이 발생합니다. 그냥 방치하면 모르겠지만 끊임없이 새로운 것을 시도해보고 개선을 시도해 본다면 DB 백업 및 복원은 일상적으로 일어나는 일들이 될 것입니다.
그리고 서버 운영에서 가장 중요한 일중의 하나가 만일의 사태에 대비한 백업과 복원이라고 할 수 있죠. 솔직히 어떤일이 일어날지 모르잖아요. 군대에 빗대어 서버 복원에 실패한 서버 전문가는 용서할 수 있어도 백업에 실패한(백업하지 않은) 서버 전문가는 용서할 수 없다는 이야기도 있더군요.
이렇게 중요한 서버 백업 및 복원에 대해서 전문가도 아니면서도 서버를 어쩔 수 없이사용해야하는 저와 같은 초보에게 도움이 될길 바라면서 이해하는 범위내에서 공유했습니다.
아무쪼록 도움이 될길 바라고 차후에는 좀더 업그레이든 내용을 공유해 보도록 하겟습니다.
참고로 자동백업 스크립트등은 우성군의 NAS에서 제안한 내용을 많이 반영했습니다. 이 자리를 빌어 감사드립니다.