[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