백업의 방법에는 여러가지가 있겠지만, 여기서는 두 가지 방법을 설명하려고 합니다.

그 두 가지란,

1. SQL레벨의 백업 및 복구
2. 풀레벨의 백업 및 복구

입니다. 이 외에도 방법은 여러 가지가 있을 수 있습니다.

용도와 방식에 따라 그때 그때 상황에 맞게 사용하시면 되겠습니다.

자, 그럼 먼저 오늘 설명할 것은 1번 SQL레벨의 백업 및 복구입니다.


일단 실전에 들어가기에 앞서 알아두셔야 할 것이 있습니다.

그게 뭐냐면...  백업이나 복구를 하기 전에는 항상 LOCK를 걸어놓아야 한다는 것입니다.

LOCK에 대한 설명은 얼마 전 강좌를 통해 설명을 드렸습니다.

실은 제가 이 백업 및 복구를 설명하기 위해서 LOCK을 먼저 설명드렸던 것이었습니다....... 그랬던 것이죠.....

우오... 감동의 파도가 밀려옵니다...


어쨌든 다시 본론으로 들어와서...^^;

다시말해 백업이나 복구가 일어나는 동안은 외부에서 끼어드는 것을 차단해야 하는 것입니다.

그래야만 오류가 없는 백업 및 복구가 일어날 수 있습니다.

그럼 이제 실전에 들어가보겠습니다.

테스트를 위해서 임의의 테이블을 하나 만들었습니다.





테이블 이름은 employee이고 4개의 로우가 데이터로 들어가 있습니다. 어떤 구조인지 아시겠죠?

이제 첫 단계로 테이블에 대해 락(LOCK)을 걸도록 하겠습니다.

mysql> LOCK TABLES employee READ;

employee 테이블에 대해 READ 락을 걸었습니다.

이제 다른 곳에서 접속한 사람은 이 테이블에 대해 select문장만 수행할 수 있고, update나 delete처럼

테이블의 변경은 할 수 없는 상태가 됩니다. 이 상태에서 백업을 하는 것이지요.

그럼 백업을 하겠습니다.

mysql> SELECT * INTO OUTFILE '/tmp/backup.sql' FROM employee;

SELECT ~ INTO OUTFILE 이라는 구문을 사용하였습니다.

이 문장을 쓰게되면 employee 테이블의 테이타가 문장상에 적어놓은 backup.sql 이라는 파일로 저장됩니다.

어디 backup.sql 파일을 열어볼까요?


# vi  /tmp/backup.sql




테이블에 있던 데이터들이 보이죠?

간단히 파일로 입력되었지만, 나름대로 법칙에 따라 입력이 된 상태입니다.

예를 들어 칼럼과 칼럼사이는 TAB키로 떨어져있습니다. 절대 스페이스바를 이용한 공백이 아닙니다.

어쨌든 우리는 이 구조를 이용해서 데이타가 유실된 경우에 복구를 할 수 있게 되는 것입니다.

그럼 한번 복구 테스트를 해보도록 하지요.

일단 테이블의 데이타를 유실했다는 가정을 만들기 위해 employee 테이블의 모든 데이타를 지웁니다.

mysql> delete from employee;

이로써 employee 테이블에는 아무 데이터도 없습니다. 테이블 구조만 있는 테이블이 된 것이죠.

참고로 mysql에서는 백업이 안된 상태에서 delete로 데이터를 삭제했을 때

복구시킬 수 있는 방법이 없습니다.

따라서 delete나 update문장을 수행할 때는 항상 세심한 주의가 필요합니다.


이제 아까 백업해 놓은 파일을 이용해서 복구를 하겠습니다. 지워진 데이터를 다시 살리겠다는 뜻이죠.


복구시에는 LOAD DATA INFILE이라는 SQL문장을 사용합니다.

LOAD DATA INFILE '파일명' INTO TABLE 테이블명;

이 문장으로 복구를 실시해 보겠습니다.





문장이 수행되었다고 나옵니다.

복구가 되었는지 확인해보면...





이렇게 원상태로 복구가 되었습니다.

모든 테스트가 완료 되었으므로 LOCK을 풀어주도록 하겠습니다.

# UNLOCK TABLES;

그러면 모든 것이 완료가 됩니다.

그리 어렵지 않죠? ^^

사실 이 SELECT INTO OUTFILE 구문이나, LOAD DATA INFILE 구문은 백업 및 복구뿐만아니라,

다른 용도로도 유용하게 사용할 수 있습니다.

반복되는 SQL문장을 저장해놓고 사용하고자 할 때 사용할 수도 있는 것이지요...

당장 테스트 해보고 싶은 마음이 솟아오르지 않습니까? ^^


그럼 한번 테스트 해보시구요...

다음 시간에는 백업 및 복구의 두 번째, '풀백업 및 복구'에 대해서 해보도록 하겠습니다.

잠깐 미리 귀뜸을 하자면, 풀백업 및 복구가 사실상의 백업 복구라고 할 수 있습니다.

레벨이 조금은 높다고 할 수 있지요...
Posted by gala
l