[MariaDB] DB 백업 / 복원하기

반응형

안녕하세요.

 

이번 시간에는 DB 백업, 복원하기 시간을 가졌습니다.

 

어떠한 원인에 의해 DB서버는 언제든지 문제가 생길 수 있으므로 백업은 매우 중요합니다.

가령, 서버를 포맷한다거나 이동으로 장애가 아닌 경우에도 사용할 수 있으므로 매우 중요한 기술입니다.

 

따라서 TEST를 위한 DB를 아무거나 무작정 사용할 수 없으므로 MariaDB를 사용하여 DB를 직접 만들고 사용하였습니다.

 

백업에 활용한 방식은 mysqldump 방식입니다.

이 방법은 innoDB 엔진에 한해 백업방식이며, 논리 백업 방식을 사용하면서도 간단하게 실행할 수 있어 무난히 사용할 수 있습니다.

다만, 데이터 수가 많아질수록 속도는 매우 느려지는 치명적인 단점을 지녔습니다.

 

 

 

 

테스트를 위해 maria db에서 실험을 위한 DB를 생성하였습니다.

CREATE TABLE `t_molang_test`(
	`MST_NUM` INT(11) NOT NULL AUTO_INCREMENT COMMENT '일련번호',
	`MST_NAME` VARCHAR(30) NOT NULL COMMENT '이름' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`MST_NUM`) USING BTREE
)
COMMENT='기본키'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `t_molang_test2`(
	`MST_NUM` INT(11) NOT NULL AUTO_INCREMENT COMMENT '일련번호',
	`MST_NAME` VARCHAR(30) NOT NULL COMMENT '이름' COLLATE 'utf8_general_ci',
	PRIMARY KEY (`MST_NUM`) USING BTREE
)
COMMENT='기본키'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

정상적으로 데이터베이스 안의 DB가 생성되었음을 확인 할 수 있습니다.

 

 

 

2개의 테이블에 INSERT문을 활용하여 내용을 간단하게 집어넣었습니다.

그 결과 SELECT을 입력할 경우, 제대로 삽입이 되었음을 확인할 수 있습니다.

 

 

 

여기서 이제 실험을 진행하겠습니다.

 

 

백업 하기

1. 전체 데이터베이스 백업

 

1. mysqldump -u [아이디] -p [패스워드] -all-databases > [백업할 파일 명].sql

2. mysqldump -u [아이디] -p -all-databases > [백업할 파일 명].sql 

   [패스워드]

 

ex) mysqldump -uroot -proot -all-databaes > molang.sql

 

위와 같이 명령어를 입력하였을 경우, 사진처럼 molang.sql이 생긴 것을 확인할 수 있습니다.

해당 db가 소유하고 있는 모든 데이터베이스를 backup 하는 형태이며, 그만큼 실사용 db일 경우 용량이 클 수 있으므로 작업시간에는 상당한 오랜 시간이 소유될 수 있습니다.

 

 

 

2. 하나의 데이터베이스 백업

 

1. mysqldump -u [아이디] -p [패스워드] [데이터베이스 명] > [백업할 파일 명].sql

2. mysqldump -u [아이디] -p [데이터베이스 명] > [백업할 파일 명].sql

   [패스워드]

 

ex ) mysqldump -uroot -proot test > molang_test.sql

 

위와 다르게 데이터베이스 test만을 백업한 과정입니다. 전체 데이터베이스보다는 당연히 시간이 덜 소모되며, 해당 데이터베이스 내의 모든 TABLE의 정보가 필요할 경우 작업하는 방법입니다.

 

이 또한 해당 데이터베이스의 크기에 따라 작업시간, 용량이 결정되며 일부 데이터베이스만 DB 백업이 필요할 경우 주로 사용하는 방법입니다.

 

 

 

3. 특정 테이블만 백업하기

 

1. mysqldump -u [아이디] -p [패스워드] [데이터베이스 명] [테이블 명] > [백업할 파일 명].sql

2. mysqldump -u [아이디] -p [데이터베이스 명] [테이블 명] > [백업할 파일 명].sql

    [패스워드]

ex) mysql -uroot -proot test t_molang_test > molang_test_table.sql

 

데이터베이스 전체가 아닌, 데이터베이스 내의 특정 테이블만을 지목하여 백업하는 방법입니다.

이는 데이터베이스 내의 내용이 고객정보가 아닌 소모 값, 로그 등 지울 수 있는 DB의 내용을 소유하고 있는 특수한 데이터베이스일 경우 사용하는 백업 방식입니다.

 

혹은 저장공간이 부족하거나 반드시 백업해야 하지만 전체를 하기에는 시간이 너무 소유되는 경우 선택하는 방법이기 도 합니다.

 

 

 

4. 테이블 구조만 백업을 진행한다. 내용은 백업하지 않는다.

CREATE DEFINER=`root`@`%` PROCEDURE `MOLANG_PRO`(
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN


END

이번 테스트를 위해서 프로시저 또한 준비하였습니다.

 

 

프로시저 없이, 테이블만 백업하는 방법

 

1. mysqldump -u [아이디] -p [패스워드] --no-data [데이터 베이스 명] > [백업할 파일 명].sql

2. mysqldump -u [아이디] -p --no-data [데이터 베이스 명] > [백업할 파일 명].sql

   [패스워드]

 

ex) mysqldump -uroot-proot --no-data test > molang_nodata.sql

 

 

 

프로시저 , 함수 포함 테이블만 백업하는 방법

 

1. mysqldump -u [아이디] -p [패스워드] --no-data --routines [데이터베이스 명] > [백업할 파일 명].sql

2. mysqldump -u [아이디] -p --no-data --routines [데이터베이스 명] > [백업할 파일 명].sql

   [패스워드]

 

ex) mysqldump -uroot -proot --no-data --routines test > m_tt.sql

 

 

 

옵션 활용하기

--no-data : 데이터 없이 구조만 백업
-all-databases : 모든 데이터베이스
--routines : 프로시저, 함수 포함

 

 

 

 

 

이제 백업한 데이터를 반대로 복원을 시작하겠습니다.

 

 

 

복구하기

 

1. 전체 데이터베이스 복구

 

1. mysql -u [아이디] -p [패스워드] < [백업 파일명].sql

2. mysql -u [아이디] -p < [백업 파일명].sql

   [패스워드]

 

ex) mysql -uroot -proot < molang.sql

 

 

 

 

2. 일부 데이터베이스 복구

 

1. mysql -u [아이디] -p [비밀번호] [데이터 베이스 명] < [백업 파일명].sql

2. mysql -u [아이디] -p [데이터 베이스 명] < [백업 파일명].sql

   [비밀번호]

 

ex) mysql -uroot -proot test < [백업 파일명].sql

 

 

 

 

3. 일부 테이블 복구하기

 

1. mysql -u [아이디] -p [비밀번호] [데이터베이스 명] < [백업 파일 명].sql

2. mysql -u [아이디] -p [데이터베이스 명] < [백업 파일 명].sql

  [비밀번호]

 

ex) mysql -uroot -proot test< molang_test_table.sql

 

 

 

 

4. 데이터 없이 테이블 구조만 복구하기

 

1. mysql -u [아이디] -p [비밀번호] [데이터베이스 명] < [백업 파일 명].sql

2. mysql -u [아이디] -p [데이터베이스 명] < [백업 파일 명].sql

  [비밀번호]

 

서로 다른 결과

 

프로시저 저장 없이 백업한 경우

ex) mysql -uroot -proot abc < molang_tt2.sql

 

 

프로시저 저장 후 백업한 경우

ex) mysql -uroot -proot abc < m_tt.sql

생성된 프로시저 또한 정상적으로 백업된 것을 확인할 수 있습니다.

 

 

만약 mysqldump 복원이 안된다면

2021.10.06 - [Computer/DB] - [MariaDB] mysqldump가 실행이 안 되는 경우

 

 

 

 

다시 확인하기

데이터베이스 단위로 백업된 파일은 다른 데이터베이스에도 넣을 수 있습니다. (복사, 붙여 넣기)

백업한 데이터는 복구 대상이 없으면 복구되지 않습니다. (테이블 백업했으나, 테이블이 없을 경우 백업이 되지 않는다.)

백업할 때는 mysqldump, 복구할 때는 mysql을 사용합니다.

특수문자는 특수문자 앞에 \을 통해 구분할 수 있습니다.

 

 

 

 

  mysqldump 없이 DB 복구하는 방법

2022.05.19 - [Computer/DB] - [MariaDB] DB 복구하기

 

[MariaDB] DB 복구하기

MariaDB, DB 복구하기 복구하기 위해 필요한 자료  DB가 날아가지 않았어도, 실행되지 않으면 백업을 할 수가 없다. 프로그램으로도, dump로도 접근이 불가능한 참사가 이루어진다. 보통 접속 못 하

mollangpiu.tistory.com

 

반응형

댓글

Designed by JB FACTORY