MySQL 풀 레벨의 백업 및 복구 (mysqldump)
페이지 정보
작성자 JMStudy 작성일05-06-26 01:36 조회7,563회 댓글0건본문
레벨의 백업 및 복구
'풀 레벨의 백업'은 테이블도 아닌 데이터베이스 전체를 백업하는 것입니다.
여러분이 CREATE DATABASE mydb; 같은 명령어로 만들었던 바로 그 데이터베이스 전체를 백업한다는 뜻이지요. 따라서 이렇게 백업해 놓으면 데이터베이스 어디에서 문제가 발생했는지 알 수 없는 경우에도 일단은 복구가 가능해 집니다. 복구시 무조건 데이터베이스를 새로 만들게 되니까요.
mySQL에서는 mySQL을 관리하기 위한 유틸을 여러 가지 지원합니다.
mysqldump 라는 유틸을 사용해서 백업을 할 것입니다.
일단 테스트를 위해 임의로 데이터베이스와 테이블이 있다고 가정하겠습니다.
아래는 임의로 만든 mytest라는 데이터베이스와 employee라는 테이블을 보여주고 있습니다.
그러면 이제 이 데이터베이스 전체를 백업하도록 하겠습니다.
먼저 root 권한으로 변경하시구요.
# su
일단 mySQL의 유틸들이 있는 디렉토리로 이동합니다.
# cd /usr/local/mysql/bin
그런 다음 이제 mysqldump를 실행합니다.
mysqldump -p 데이터베이스명 > '파일명'
# ./mysqldump -p mytest > '/tmp/mytestbackup.txt'
데이터베이스 전체가 /tmp 디렉토리 밑에 mytestbackup.txt 라는 파일로 백업이 되었습니다.
이제 이 mytestbackup.txt 라는 파일을 잘 관리하시면 됩니다.
이번엔 mytestbackup.txt 라는 파일이 어떻게 생겼는지 볼 차례입니다.
# vi /tmp/mytestbackup.txt
# MySQL dump 8.12
#
# Host: localhost Database: mytest
#--------------------------------------------------------
# Server version 3.23.32
#
# Table structure for table 'employee'
#
CREATE TABLE employee (
emp_id varchar(4) NOT NULL default '',
emp_name varchar(15) NOT NULL default '',
emp_salary int(11) default NULL,
PRIMARY KEY (emp_id)
) TYPE=MyISAM;
#
# Dumping data for table 'employee'
#
INSERT INTO employee VALUES ('1001','박정민',170);
INSERT INTO employee VALUES ('1002','장진영',200);
INSERT INTO employee VALUES ('1003','정우성',250);
INSERT INTO employee VALUES ('1004','김삼순',300);
얼핏 봐도 무슨 내용인지 아시겠죠? SQL 문장들이 쭈욱 써있습니다.
복구시에는 이 SQL 문장들을 그대로 실행하게 됩니다.
그러면 테이블이나 데이터들이 원래 있던 그대로 만들어지겠쬬...
이제 복구를 테스트해 보도록 하겠습니다.
그러기 위해서 일단 mytest 데이터베이스 안에 있는 데이터들을 모두 삭제하겠습니다.
mysql> DROP TABLE employee;
mysql> show tables;
라고 명령해봤자 mytest 데이터베이스 안에는 테이블이 하나도 없습니다.
아까 백업해 놓은 mytestbackup.txt 파일만이 유일한 복구 방책이 되는 것이죠.
이제 그 파일을 가지고 테이블들을 복구해 보도록 하겠습니다.
복구시에는 mysqldump가 아니라 mysql이라는 유틸을 명령으로 사용한다는 것이지요.
# ./mysql -p mytest < '/tmp/mytestbackup.txt'
꺾임쇠가 오른쪽(>)이 아니라 왼쪽(<)임을 유심히 봐주세요.
이렇게 명령을 내리신 후 데이터를 확인해 보면..
employee라는 테이블이 다시 만들어져 있고 데이터들도 제대로 들어가 있는 것을 확인하실 수 있습니다.
그리고 mysqldump나 mysql 유틸 역시 꼭 백업,복구에만 쓰이는 것은 아닙니다.
SQL문장을 저장해서 쓴다든가 아니면 다른 목적으로도 사용될 수 있습니다.
'풀 레벨의 백업'은 테이블도 아닌 데이터베이스 전체를 백업하는 것입니다.
여러분이 CREATE DATABASE mydb; 같은 명령어로 만들었던 바로 그 데이터베이스 전체를 백업한다는 뜻이지요. 따라서 이렇게 백업해 놓으면 데이터베이스 어디에서 문제가 발생했는지 알 수 없는 경우에도 일단은 복구가 가능해 집니다. 복구시 무조건 데이터베이스를 새로 만들게 되니까요.
mySQL에서는 mySQL을 관리하기 위한 유틸을 여러 가지 지원합니다.
mysqldump 라는 유틸을 사용해서 백업을 할 것입니다.
일단 테스트를 위해 임의로 데이터베이스와 테이블이 있다고 가정하겠습니다.
아래는 임의로 만든 mytest라는 데이터베이스와 employee라는 테이블을 보여주고 있습니다.
그러면 이제 이 데이터베이스 전체를 백업하도록 하겠습니다.
먼저 root 권한으로 변경하시구요.
# su
일단 mySQL의 유틸들이 있는 디렉토리로 이동합니다.
# cd /usr/local/mysql/bin
그런 다음 이제 mysqldump를 실행합니다.
mysqldump -p 데이터베이스명 > '파일명'
# ./mysqldump -p mytest > '/tmp/mytestbackup.txt'
데이터베이스 전체가 /tmp 디렉토리 밑에 mytestbackup.txt 라는 파일로 백업이 되었습니다.
이제 이 mytestbackup.txt 라는 파일을 잘 관리하시면 됩니다.
이번엔 mytestbackup.txt 라는 파일이 어떻게 생겼는지 볼 차례입니다.
# vi /tmp/mytestbackup.txt
# MySQL dump 8.12
#
# Host: localhost Database: mytest
#--------------------------------------------------------
# Server version 3.23.32
#
# Table structure for table 'employee'
#
CREATE TABLE employee (
emp_id varchar(4) NOT NULL default '',
emp_name varchar(15) NOT NULL default '',
emp_salary int(11) default NULL,
PRIMARY KEY (emp_id)
) TYPE=MyISAM;
#
# Dumping data for table 'employee'
#
INSERT INTO employee VALUES ('1001','박정민',170);
INSERT INTO employee VALUES ('1002','장진영',200);
INSERT INTO employee VALUES ('1003','정우성',250);
INSERT INTO employee VALUES ('1004','김삼순',300);
얼핏 봐도 무슨 내용인지 아시겠죠? SQL 문장들이 쭈욱 써있습니다.
복구시에는 이 SQL 문장들을 그대로 실행하게 됩니다.
그러면 테이블이나 데이터들이 원래 있던 그대로 만들어지겠쬬...
이제 복구를 테스트해 보도록 하겠습니다.
그러기 위해서 일단 mytest 데이터베이스 안에 있는 데이터들을 모두 삭제하겠습니다.
mysql> DROP TABLE employee;
mysql> show tables;
라고 명령해봤자 mytest 데이터베이스 안에는 테이블이 하나도 없습니다.
아까 백업해 놓은 mytestbackup.txt 파일만이 유일한 복구 방책이 되는 것이죠.
이제 그 파일을 가지고 테이블들을 복구해 보도록 하겠습니다.
복구시에는 mysqldump가 아니라 mysql이라는 유틸을 명령으로 사용한다는 것이지요.
# ./mysql -p mytest < '/tmp/mytestbackup.txt'
꺾임쇠가 오른쪽(>)이 아니라 왼쪽(<)임을 유심히 봐주세요.
이렇게 명령을 내리신 후 데이터를 확인해 보면..
employee라는 테이블이 다시 만들어져 있고 데이터들도 제대로 들어가 있는 것을 확인하실 수 있습니다.
그리고 mysqldump나 mysql 유틸 역시 꼭 백업,복구에만 쓰이는 것은 아닙니다.
SQL문장을 저장해서 쓴다든가 아니면 다른 목적으로도 사용될 수 있습니다.
댓글목록
등록된 댓글이 없습니다.