[MariaDB] DB 백업 / 복원하기
- Computer/DB
- 2021. 3. 16.
안녕하세요.
이번 시간에는 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 복구하기
'Computer > DB' 카테고리의 다른 글
[MySQL||MariaDB] 1093 Error 발생시 (0) | 2021.06.07 |
---|---|
[Mysql] 프로시저 사용시 주의사항 (0) | 2021.03.16 |
[MYSQL] 계정 만들기 / 권한 확인하기 (0) | 2021.01.04 |
[Oracle] 프로시저를 통해서 Table 생성하기 (0) | 2020.09.20 |
[ORACLE] DML 데이터 조작어 (0) | 2020.09.14 |