MySQL에서 백업 및 복구
페이지 정보
작성자 JMStudy 작성일05-06-26 01:33 조회6,646회 댓글0건본문
mySQL에서 백업 및 복구에 대해서 알아보겠습니다.
백업의 방법에는 여러가지가 있겠지만, 여기서는 두 가지 방법을 설명하려고 합니다.
그 두 가지란,
1. SQL레벨의 백업 및 복구
2. 풀레벨의 백업 및 복구
입니다. 이 외에도 방법은 여러 가지가 있을 수 있습니다.
용도와 방식에 따라 그때 그때 상황에 맞게 사용하시면 되겠습니다.
자, 그럼 먼저 오늘 설명할 것은 1번 SQL레벨의 백업 및 복구입니다.
일단 실전에 들어가기에 앞서 알아두셔야 할 것이 있습니다.
백업이나 복구를 하기 전에는 항상 LOCK를 걸어놓아야 한다는 것입니다.
백업이나 복구가 일어나는 동안은 외부에서 끼어드는 것을 차단해야 하는 것입니다.
그래야만 오류가 없는 백업 및 복구가 일어날 수 있습니다.
이제 첫 단계로 테이블에 대해 락(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 이라는 파일로 저장됩니다.
간단히 파일로 입력되었지만, 나름대로 법칙에 따라 입력이 된 상태입니다.
예를 들어 칼럼과 칼럼사이는 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문장을 저장해놓고 사용하고자 할 때 사용할 수도 있는 것이지요...
그럼 이만 좋은 하루 되시길...
백업의 방법에는 여러가지가 있겠지만, 여기서는 두 가지 방법을 설명하려고 합니다.
그 두 가지란,
1. SQL레벨의 백업 및 복구
2. 풀레벨의 백업 및 복구
입니다. 이 외에도 방법은 여러 가지가 있을 수 있습니다.
용도와 방식에 따라 그때 그때 상황에 맞게 사용하시면 되겠습니다.
자, 그럼 먼저 오늘 설명할 것은 1번 SQL레벨의 백업 및 복구입니다.
일단 실전에 들어가기에 앞서 알아두셔야 할 것이 있습니다.
백업이나 복구를 하기 전에는 항상 LOCK를 걸어놓아야 한다는 것입니다.
백업이나 복구가 일어나는 동안은 외부에서 끼어드는 것을 차단해야 하는 것입니다.
그래야만 오류가 없는 백업 및 복구가 일어날 수 있습니다.
이제 첫 단계로 테이블에 대해 락(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 이라는 파일로 저장됩니다.
간단히 파일로 입력되었지만, 나름대로 법칙에 따라 입력이 된 상태입니다.
예를 들어 칼럼과 칼럼사이는 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문장을 저장해놓고 사용하고자 할 때 사용할 수도 있는 것이지요...
그럼 이만 좋은 하루 되시길...
댓글목록
등록된 댓글이 없습니다.