서버운영관리

이승호 에반젤리스트

MySQL 백업 및 복원

MySQL을 이용하여 DB 관리와 서비스를 하고 있다면 중요한 데이터를 주기적으로 백업할 필요가 있다. 

데이터가 삭제되거나 변조되면 서비스에 치명적인 영향을 주기 때문에 백업본을 보관하는것은 필수이다.

약간의 데이타가 변조되거나 테이블이 깨지는 등 간단한 쿼리로 복구가 가능하다면 상관없지만 예전 상태로

데이터 복구가 힘들다면 최근에 백업된 데이터를 덮어씌우는 방법을 사용하기도 한다. 

∗ 물론 백업파일이 생성된 시점과 현재 사이의 데이터 유실은 있을 수 있다.

 

 

MYSQL 덤프 백업하기


 

 

• 특정 데이터베이스 내의 테이블만 백업하고자 할때  

(데이터베이스 용량이 아주 큰 경우가 아니라면 그냥 DB 전체를 하는것을 추천한다)

$ mysqldump -u 아이디 -p DB명 테이블명 > 파일명.sql

 

• 특정 데이터베이스 하나만을 백업하고자 할때

 $ mysqldump -u 아이디 -p DB명 > 파일명.sql

 

• mysql 전체 데이터베이스 백업

 $ mysqldump -u root -p  –all-databases > 파일명.sql

 

 

파일명 생성

 DB 파일이라는것을 표기하기 위해 파일 확장자는 .sql 로 정한다.

파일명은 DB명.테이블명.날짜 조합으로 어떤 DB, TABLE 이며 언제 백업된것인지 파일로 명시해주면 파일을 찾을때 유용하다.

ex) xe.table-2016-04-12-1300.sql (한눈에 의미를 파악하기 좋다)

 

vi 편집기를 통해 백업된 파일을 열어봐도 sql 백업파일이라는것이 확인된다.

 -- MySQL dump 10.13 Distrib 5.1.73, for redhat-linux-gnu (x86_64)

--
-- Host: localhost Database: xe
-- ------------------------------------------------------
-- Server version 5.1.73

 

 

복원은 비교적 간단하다

∗ 유의할점은 현재 운영중인 문제없는 서버에서는 복원하면 안된다는것이며 자료가 날라갈수도 있으니 유의하자.

 

 

MYSQL 덤프 복원


 

 

• 특정 DB의 테이블을 복구

 $ mysql -u 아이디 -p DB명 테이블명 < 파일명.sql

 

• 특정 데이터베이스 하나만을 복원하고자 할때

 $ mysql -u 아이디 -p DB명 < 파일명.sql

 

• mysql 전체 데이터베이스 복원

 $ mysql -u root -p xe < xe.sql
Enter password: (패스워드 입력)
$

 

∗ mysqldump --help 혹은 man mysqldump 명령어를 입력해보면 보다 자세한 사용법과 옵션등을 볼 수 있다.

 

 

tar 를 이용한 mysql data 파일 백업


 

 

그외 방법으로는 간단하게 mysql 의 데이터 디렉토리를 통째로 백업하는 방법도 있다

 

1. 'ps -ef | grep mysql' 명령어를 실행하면 mysql data 저장 경로를 확인할 수 있다.

 --datadir=/var/lib/mysql

∗ mysql 설치환경에 따라 디렉토리 위치는 바뀔 수 있음

 

2. tar 압축 명령어를 사용하여 위 데이터 디렉토리를 압축하면 된다.

 $ tar cvfz 압축할파일이름.tar.gz /var/lib/www

tar 를 이용한 mysql data 파일 복원


 

 

1. 복원하려면 

 $ tar xvfz 압축한파일이름.tar.gz

 

2. 복원후에 mysql 서비스를 재시작 한다

 $ service mysqld restart

$ /etc/init.d/mysqld restart

∗ 복원하는것 또한  현재 운영중 (서비스중) 인 서버에는 하지 않는다. (현재 자료에 덮어씌우기 때문이다.) 

 

NOTE

 DB는 데이터가 가장 중요하다.
  • 처음에 소개된 mysqldump 를 통한 백업과 tar 압축명령어를 이용하여 백업하고
  • 백업된 파일은 서버와 별도의 저장장치에 각각 이중 보관하는게 안전하다.