MySQL 시리즈 의 12 백업 및 복구

시리즈 강좌
MySQL 시리즈 의 시작 MySQL 관계 형 데이터베이스 기초 개념
MySQL 시리즈 중 하나 인 MariaDB-server 설치
MySQL 시리즈 의 두 번 째 인 스 턴 스 설정
MySQL 시리즈 의 3 가지 기초 편
MySQL 시리즈 의 4 SQL 문법
MySQL 시리즈 의 다섯 가지 보기,저장 함수,저장 과정,트리거
MySQL 시리즈 의 6 사용자 및 권한 부여
MySQL 시리즈 7 MySQL 저장 엔진
MySQL 시리즈 8 MySQL 서버 변수
MySQL 시리즈 의 9 my sql 캐 시 및 색인 조회
MySQL 시리즈 의 10 MySQL 사무 격 리 병행 제어 실현
MySQL 시리즈 의 11 로그 기록
MySQL 시리즈 의 12 백업 및 복구
MySQL 시리즈 13 MySQL 복사
MySQL 시리즈 의 14 MySQL 의 높 은 사용 가능 한 구현
MySQL 시리즈 의 15 MySQL 상용 설정 및 성능 압력 테스트
백업 정책
1.백업 의 유형
유형 1:
  • 열 백업:읽 기와 쓰기 에 영향 을 받 지 않 습 니 다(MyISAM 은 열 비 를 지원 하지 않 습 니 다.InnoDB 는 열 비 를 지원 합 니 다)
  • 온도 백업:읽 기 동작 만 수행 할 수 있 습 니 다
  • 냉 백업:오프라인 백업,읽 기와 쓰기 모두 중단
  • 유형 2:
  • 물리 백업:데이터 파일 을 복사 하여 백업 하고 비교적 많은 공간 을 차지 하 며 속도 가 빠르다
  • 논리 백업:데 이 터 를 텍스트 파일 로 내 보 냅 니 다.사용 공간 이 적 고 속도 가 느 려 서 정밀도 가 떨 어 질 수 있 습 니 다
  • 유형 3:
  • 완전 백업:모든 데이터 백업
  • 증분 백업:지난번 완전 백업 또는 증분 백업 이후 변화 한 데이터 만 백업 하고 백업 이 빠 르 며 복원 이 복잡 하 다
  • .
  • 차이 백업:지난번 완전 백업 이후 변 화 된 데이터 만 백업 하고 백업 이 느 리 며 복원 이 간단 합 니 다
  • 2.백업 에 고려 해 야 할 요소
  • 온도 가 자 물 쇠 를 얼마나 가지 고 있 는 지 잠 긴 상태 에서 데 이 터 를 쓸 수 없습니다
  • 백업 에 발생 하 는 부하,남 은 시간 백업
  • 백업 과정 이 길 고 데이터 양 이 많 을 때 시간 이 길 기 때문에 적당 한 방안 을 선택해 야 한다
  • 복구 과정의 시간 이 길 고 백업 데 이 터 는 실시 간 으로 테스트 해 야 한다
  • 3.백업 대상
  • 데이터베이스 데이터,표 공간 마다 따로 저장
  • 바 이 너 리 로 그 는 데이터 와 분리 하여 저장 해 야 합 니 다
  • InnoDB 의 사무 로그
  • 저장 과정,저장 함수,트리거 또는 이벤트 스케줄 러 등
  • 서버 설정 파일:/etc/my.cnf
  • 4.백업 도구
  • mysqldump :논리 백업 도구 로 모든 저장 엔진 의 온 도 를 적용 합 니 다.완전 또는 일부 백업 지원;InnoDB 메모리 엔진 에 열 비 지원;Schema(데이터베이스 정의)와 데이터 가 함께 저 장 됩 니 다.
  • 
      :
               shell> mysqldump [options] db_name [tbl_name ...]
               shell> mysqldump [options] --databases db_name ...
               shell> mysqldump [options] --all-databases
    
      :
    	-A:     
    	-B db_name1,[db_name2,...]:     
    	-E:       event scheduler
    	-R:             
    	--triggers:        ,    , --skip-triggers,      
    	--master-data={1|2}:
    		 1:              CHANGE MASTER TO  ,   ,      1
    		 2:      CHANGE MASTER TO  ,  :        --lock-tables  ,    --lock-all-tables  (    --single-transaction)
    	-F:       ,      ,  flush logs  ,           ,  -A ,          ,              ,      --flush-logs -x,--master-data -single-transaction,       ;  : -x,--master-data  --single-transaction    
    	--compact     ,    ,     
    	-d:      
    	-t:     ,   create table
    	-n:   create database,  -A -B  
    	--flush-privileges:        ,  mysql         
    	-f:  SQL  ,    
    	--hex-blob:              (  ,“abc”  0x616263),          BINARY, VARBINARY,BLOB,BIT
    	-q:     ,    ,      
    MyISAM 백업 옵션:온 비 를 지원 합 니 다.열 준비 가 지원 되 지 않 기 때문에 백업 할 라 이브 러 리 를 잠 그 고 백업 작업 을 시작 해 야 합 니 다.
    -x,--lock-all-tables:전역 읽 기 자 물 쇠 를 추가 하여 모든 라 이브 러 리 의 모든 표를 잠 그 고--single-transaction 또는--lock-tables 옵션 을 추가 하면 이 옵션 을 닫 습 니 다.주의:데이터 양 이 많 을 때 데이터 베 이 스 를 동시 방문 하지 못 할 수 있 습 니 다.
    -l,--lock-tables:백업 이 필요 한 모든 데이터베이스 에 대해 백업 을 시작 하기 전에 모든 표를 잠 그 고 기본 값 은 on 입 니 다.--skip-lock-tables 옵션 을 사용 하지 않 으 면 MyISAM 을 백업 하 는 여러 라 이브 러 리 에 데이터 가 일치 하지 않 을 수 있 습 니 다.
    InnoDB 백업 옵션:열 비 를 지원 합 니 다.온 비 는 가능 하지만 권장 하지 않 습 니 다.
    --single-transaction:이 옵션 은 Innodb 에서 추천 합 니 다.MyISAM 은 적용 되 지 않 습 니 다.이 옵션 은 백업 을 시작 하기 전에 START TRANSACTION 명령 을 실행 하여 트 랜 잭 션 을 시작 합 니 다.이 옵션 은 하나의 트 랜 잭 션 에서 모든 표를 저장 하여 일치 하 는 스냅 샷 을 만 듭 니 다.다 중 버 전 제 어 를 지원 하 는 메모리 엔진 에 저 장 된 테이블 에 만 적 용 됩 니 다(현 재 는 InnoDB 만 가능 합 니 다).덤 프 는 다른 저장 엔진 과 일치 하 는 것 을 보장 하지 않 는 다.
    단일 트 랜 잭 션 덤 프 를 진행 할 때 유효한 덤 프 파일(정확 한 표 내용 과 바 이 너 리 로그 위치)을 확보 하려 면 다음 과 같은 문 구 를 사용 하지 않도록 해 야 합 니 다:ALTER TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE
    이 옵션 은--lock-tables(이 옵션 은 걸 려 있 는 사 무 를 포함 합 니 다)옵션 과 백업 대형 표를 서로 배척 할 때--single-transaction 옵션 과--quick 를 결합 하여 사용 하 는 것 을 권장 합 니 다.
    
    InnoDB      :
    	mysqldump Curoot CA CF CE CR  --single-transaction --master-data=1 --flush-privileges  --triggers --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql
    
    MyISAM      :
    	mysqldump Curoot CA CF CE CR Cx --master-data=1 --flush-privileges  --triggers --hex-blob >$BACKUP/fullbak_$BACKUP_TIME.sql
  • xtrabackup 도구:Percona 에서 InnoDB 에 대한 열 준비(물리 백업)를 지원 하 는 도 구 를 제공 하고 완전 백업,증분 백업
  • 을 지원 합 니 다.
    Percona 회사 가 제공 하 는 my sql 데이터베이스 백업 도구 로 innodb 와 xtradb 데이터 베 이 스 를 열 준비 할 수 있 는 도구 입 니 다.
    xtrabackup 은 InnoDB 시 계 를 백업 하 는 데 사용 되 며,비 InnoDB 시 계 를 백업 할 수 없습니다.
    innobackupex 스 크 립 트 는 비 InnoDB 표를 백업 하 는 데 사 용 됩 니 다.또한 xtrabackup 명령 을 사용 하여 InnoDB 표를 백업 할 것 입 니 다.또한 MySQL Server 와 명령 을 보 내 서 대화 할 것 입 니 다.예 를 들 어 전체 읽 기 자물쇠(FTWRL),비트 점 가 져 오기(SHOW SLAVE STATUS)등 입 니 다.즉,innobackupex 는 xtrabackup 위 에 포장 을 해서 이 루어 진 것 이다.
    현재 MyISAM 표를 사용 하지 않 지만 MySQL 라 이브 러 리 에 있 는 시스템 표 는 MyISAM 이기 때문에 백업 은 기본적으로 innobackupex 명령 을 통 해 이 루어 집 니 다.
    xtrabackup 버 전이 2.4 로 업 그 레이 드 된 후에 이전의 2.1 에 비해 비교적 큰 변화 가 생 겼 다.innobackupex 기능 은 모두 xtrabackup 에 통합 되 었 고 하나의 binary 프로그램 만 있 었 다.또한 호환성 을 고려 하기 위해 innobackupex 는 xtrabackup 의 소프트 링크 로 서 xtrabackup 은 현재 비 Innodb 표 백업 을 지원 하고 Innobackupex 는 다음 버 전에 서 제거 되 었 다.xtrabackup 을 통 해 innobackupex 를 교체 하 는 것 을 권장 합 니 다.
    innobakupex 백업 을 사용 할 때 xtrabakup 을 사용 하여 모든 InnoDB 표를 백업 하고 표 구조 정의 에 관 한 모든 파일(frm)과 MyISAM,MERGE,CSV 와 ARCHIVE 표 의 관련 파일 을 복사 하 며 트리거 와 데이터베이스 설정 정보 와 관련 된 파일 도 백업 합 니 다.이 파일 들 은 시간 이름 을 가 진 디 렉 터 리 에 저 장 됩 니 다.백업 할 때 innobackupex 는 백업 디 렉 터 리 에 다음 과 같은 파일 을 만 듭 니 다.
  • 1)xtrabackup_checkpoints:백업 형식(예 를 들 어 완전 또는 증분),백업 상태(예 를 들 어 prepared 상태)와 LSN(로그 시리 얼 번호)범위 정보,모든 InnoDB 페이지(보통 16k 크기)에는 로그 시리 얼 번호,즉 LSN 이 포함 되 어 있 습 니 다.LSN 은 전체 데이터베이스 시스템 의 시스템 버 전 번호 로 각 페이지 와 관련 된 LSN 은 이 페이지 가 최근 에 어떻게 바 뀌 었 는 지 나 타 낼 수 있다.
  • 2)xtrabackup_binlog_info:MySQL 서버 에서 현재 사용 하고 있 는 바 이 너 리 로그 파일 과 백업 하 는 순간 까지 바 이 너 리 로그 이벤트 의 위치;
  • 3)xtrabackup_info:innobackupex 도구 가 실 행 될 때의 정보;
  • 4)backup-my.cnf:백업 명령 에 사용 할 설정 옵션 정보;
  • 5)xtrabackup_logfile:생 성 된 로그 파일 을 백업 합 니 다.
  • 
      :
    	innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
    
      :
        --user:         
        --password:          
        --host:             
        --databases:            ,          ,          ; :"xtra_test dba_test",  ,        ,            。 :"mydatabase.mytable"。    innodb     ,       innodb 
        --defaults-file:            MySQL  ,              
        --incremental:             ,    --incremental-basedir
        --incremental-basedir:                    , --incremental    
        --incremental-dir:               
        --include=name:    ,  :databasename.tablename
        --apply-log:     ,      ,            ,                                       。  ,              。                                           
    	--use-memory:      --apply-log      ,prepare      ,xtrabackup crash recovery       ,    。  (1MB,1M,1G,1GB),  1G
    	--export:                  Mysql 
    	--redo-only:    prepare base full backup,   merge        
    	--copy-back:                MySQL    datadir
    	--move-back:     --copy-back  ,            ,          。      backup  ,       。    :                  Backup  
    주의:
    1)datadir 디 렉 터 리 가 비어 있어 야 합 니 다.innobackupex--force-non-empty-directories 옵션 이 지정 되 지 않 는 한--copy-backup 옵션 은 덮어 쓰 지 않 습 니 다.
    2)restore 전에 shutdown MySQL 인 스 턴 스 를 사용 해 야 합 니 다.실행 중인 인 스 턴 스 를 datadir 디 렉 터 리 에 복원 할 수 없습니다.
    3)파일 속성 이 유지 되 기 때문에 대부분의 경우 인 스 턴 스 를 시작 하기 전에 파일 의 속 주 를 my sql,chown-R my sql:my sql/data/my sqldb 로 바 꿔 야 합 니 다.
  • mysqlbackup 도구:열 백업,MySQL Enterprise Edition 구성 요소
  • my sql hotcopy 도구:거의 냉 비,MyISAM 저장 엔진
  • 에 만 적 용 됩 니 다.
  • lvm 스냅숏 백업 기반:거의 핫 하고 스냅숏 을 찍 기 전에 잠 궈 야 합 니 다
  • tar+cp 등 압축 파일 복사 도구 백업:완전 냉 비
  • 2.백업 방안
    1,cp+tar==물리 냉각
    데이터 디 렉 터 리 를 압축 백업 하려 면 서 비 스 를 중지 해 야 합 니 다.추천 하지 않 습 니 다.
    1)백업:
    
    ~]# mkdir /backup
    ~]# systemctl stop mariadb #    
    ~]# tar Jcf /backup/mariadb_all.tar.xz /var/lib/mysql/ #    
    backup]# systemctl start mariadb
    2)복원:
    
    ~]# systemctl stop mariadb
    ~]# rm /var/lib/mysql/ -rf  #       
    ~]# cd /backup/
    backup]# tar xf mariadb_all.tar.xz  #          
    backup]# cp -av var/lib/mysql/ /var/lib/ #  
    backup]# systemctl start mariadb #    ,    
    2.lvm 스냅숏+binlog==거의 물리 열 준비+증분 백업
    1)백업:lvm 논리 볼 륨 에 데이터베이스 디 렉 터 리 를 저장 해 야 합 니 다.
    
    ~]# systemctl stop mariadb
    ~]# rm /var/lib/mysql/ -rf  #       
    ~]# cd /backup/
    backup]# tar xf mariadb_all.tar.xz  #          
    backup]# cp -av var/lib/mysql/ /var/lib/ #  
    backup]# systemctl start mariadb #    ,    
    
      lvm  :
    ~]# pvcreate /dev/sda5
    ~]# vgcreate vg0 /dev/sda5
    ~]# lvcreate -n lv_data -L 10G vg0
    ~]# lvcreate -n lv_binlog -L 10G vg0
    ~]# mkfs.xfs /dev/vg0/lv_data
    ~]# mkfs.xfs /dev/vg0/lv_binlog
    ~]# mkdir -pv /data/{mysqldb,binlog}  #                
    ~]# chown -R mysql:mysql /data/
    ~]# vim /etc/fstab
    	UUID=4e3d726a-d420-4c1e-812b-da315012ba86 /data/mysqldb xfs defaults 0 0
    	UUID=6dd98866-769f-4369-8738-291fbcc94ca1 /data/binlog xfs defaults 0 0 
    
         ,        :
    ~]# yum install mariadb-server -y
    ~]# vim /etc/my.cnf
        [mysqld]
        datadir = /data/mysqldb  #         
        log_bin = /data/binlog/mariadb-bin  #         ,         
        innodb_file_per_table = ON  #           
    ~]# systemctl start mariadb
    ~]# mysql  #     ,           ,      
    MariaDB [(none)]> CREATE DATABASE school;  #        
    MariaDB [(none)]> use school
    MariaDB [school]> CREATE TABLE testtb (id int auto_increment primary key,name char(30),age int default 20);  #       
    MariaDB [school]> DELIMITER //  #        “//”
    MariaDB [school]> CREATE PROCEDURE pro_testtb()  #       ,             
        -> BEGIN
        -> declare i int;
        -> set i = 1;
        -> while i < 100000
        -> do INSERT INTO testtb(name,age) VALUES (CONCAT('testuser',i),i);
        -> SET i = i + 1;
        -> END while;
        -> END//
    MariaDB [school]> DELIMITER ;  #            
    MariaDB [school]> CALL pro_testtb;  #       
    MariaDB [school]> SELECT COUNT(*) FROM testtb;  #            
    +----------+
    | COUNT(*) |
    +----------+
    |    99999 |
    +----------+
    
        :
    MariaDB [school]> FLUSH TABLES WITH READ LOCK;  #       ,        
    MariaDB [school]> FLUSH LOGS;  #         
    MariaDB [school]> SHOW MASTER LOGS;  #          
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 |     30334 |
    | mariadb-bin.000002 |   1038814 |
    | mariadb-bin.000003 |  29178309 |
    | mariadb-bin.000004 |       528 |
    | mariadb-bin.000005 |       245 |  #       ,        
    +--------------------+-----------+
    ~]# lvcreate -L 5G -n lv_mysql_snap -s -p r /dev/vg0/lv_data  #            ,    mysql  
    MariaDB [school]> UNLOCK TABLES;  #           ,      
    ~]# mount -o nouuid,norecovery /dev/vg0/lv_mysql_snap /mnt/  #      /mnt
    ~]# cp -av /mnt/ /backup  #         
    ~]# umount /mnt/
    ~]# lvremove /dev/vg0/lv_mysql_snap  #           ,       ,        ~
    
         :
    MariaDB [school]> CALL pro_testtb;  #              
    MariaDB [school]> SELECT COUNT(*) FROM testtb;
    +----------+
    | COUNT(*) |
    +----------+
    |   199998 |  #            
    +----------+
    2)복원:
    
           :
    ~]# rm -rf /data/mysqldb/*  #     ,  BB,     
    ~]# systemctl stop mariadb  #   
    
        :
    ~]# cp -av /backup/* /data/mysqldb/  #      cp        
     /etc/my.cnf [mysqld]   skip_networking,         ,            
    ~]# systemctl start mariadb  #    
    ~]# ls -1 /data/binlog/  #            
        mariadb-bin.000001
        mariadb-bin.000002
        mariadb-bin.000003
        mariadb-bin.000004
        mariadb-bin.000005
        mariadb-bin.000006
        mariadb-bin.index
    ~]# mysqlbinlog --start-position=245 /data/binlog/mariadb-bin.000005 > binlog.sql  #              
    ~]# mysqlbinlog /data/binlog/mariadb-bin.000006 >> binlog.sql  #              sql   
    ~]# mysql < binlog.sql  #                        
    ~]# mysql -e 'SELECT COUNT(*) FROM school.testtb'  #    ,        ,nice
    +----------+
    | COUNT(*) |
    +----------+
    |   199998 |
    +----------+
     /etc/my.cnf [mysqld]   skip_networking,    ,      ~
    3.my sqldump+InnoDB+binlog=완전 논리 열 준비+증분 백업
    1)백업:여기 서 나 는 더 이상 데 이 터 를 만 들 지 않 고 위의 환경 에 이 어 한다.
    
    ~]# mysqldump -A -F -E -R --single-transaction --master-data=2 --flush-privileges  > /backup/full-`date +%F-%T`.sql  #      
    
    2)아 날로 그 고장:
    
    MariaDB [(none)]> CREATE DATABASE db1;  #     
    MariaDB [(none)]> CREATE DATABASE db2;  #      
    MariaDB [school]> use school;
    MariaDB [school]> DROP TABLE testtb;  #   ,              
    MariaDB [school]> CREATE TABLE students (id INT(4) AUTO_INCREMENT PRIMARY KEY,name CHAR(30),age TINYINT);  #             
    MariaDB [school]> INSERT INTO students(name,age) VALUES ('user1',20);  #        
    3)복원:
    
      ,            ,      ,   
    MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;  #  
    MariaDB [(none)]> FLUSH LOGS;  #             
    MariaDB [(none)]> SHOW MASTER LOGS;  #         
    +--------------------+-----------+
    | Log_name           | File_size |
    +--------------------+-----------+
    | mariadb-bin.000001 |     30334 |
    | mariadb-bin.000002 |   1038814 |
    | mariadb-bin.000003 |  29178309 |
    | mariadb-bin.000004 |       528 |
    | mariadb-bin.000005 |  29177760 |
    | mariadb-bin.000006 |  29177786 |
    | mariadb-bin.000007 |       953 |
    | mariadb-bin.000008 |       245 |
    +--------------------+-----------+
    ~]# systemctl stop mariadb  #    ,    
    ~]# head -30 /backup/full-2018-06-14-05\:33\:47.sql |grep "CHANGE MASTER"
    -- CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000007', MASTER_LOG_POS=245;  #          , mariadb-bin.000007 245
    ~]# ls -1 /data/binlog/
    mariadb-bin.000001
    mariadb-bin.000002
    mariadb-bin.000003
    mariadb-bin.000004
    mariadb-bin.000005
    mariadb-bin.000006
    mariadb-bin.000007
    mariadb-bin.000008
    mariadb-bin.index
    ~]# mysqlbinlog --start-position=245 /data/binlog/mariadb-bin.000007 > /backup/binlog.sql #                
    ~]# mysqlbinlog /data/binlog/mariadb-bin.000008 >> /backup/binlog.sql
    ~]# vim /backup/binlog.sql  #     sql  ,     SQL    
      "DROP TABLE `testtb` /* generated by server */"  
    
        :
    ~]# rm -rf /data/mysqldb/*  #      
    ~]# vim /etc/my.cnf  #      
    	 [mysqld]  skip_networking,        
    ~]# systemctl start mariadb  #    
    ~]# mysql < /backup/full-2018-06-14-05\:33\:47.sql  #      
    ~]# mysql < /backup/binlog.sql  #      
    MariaDB [(none)]> show databases;  #               
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | db1                |  #   
    | db2                |  #   
    | mysql              |
    | performance_schema |
    | school             |
    | test               |
    +--------------------+
    MariaDB [(none)]> SELECT COUNT(*) FROM school.testtb;
    +----------+
    | COUNT(*) |
    +----------+
    |   199999 | #   
    +----------+
    MariaDB [(none)]> SELECT * FROM school.students;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  1 | user1 |   20 | #   
    +----+-------+------+
         ,      ,       skip_networking  ,    ,    ~
    4.Xtrabackup+InnoDB==완전 핫 팩+증분 백업
    1)완전 백업
    
    ~]# innobackupex --user=root /backup/  #       
    2)첨삭 데이터
    
    MariaDB [school]> CALL pro_testtb;  #      
    MariaDB [school]> SELECT COUNT(*) FROM testtb;  #          
    +----------+
    | COUNT(*) |
    +----------+
    |   299998 |
    +----------+
    MariaDB [school]> INSERT INTO students VALUES (2,'user2',21);
    MariaDB [school]> UPDATE students SET age=19 WHERE id=1;
    MariaDB [school]> SELECT * FROM students;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  1 | user1 |   19 |
    |  2 | user2 |   21 |
    +----+-------+------+
    3)증분 백업
    
    ~]# mkdir /backup/inc{1,2}  #         
    ~]# innobackupex --incremental /backup/inc1/ --incremental-basedir=/backup/2018-06-14_10-44-57/  #               
    4)첨삭 데이터
    
    MariaDB [(none)]> CREATE DATABASE db3; 
    MariaDB [(none)]> DROP TABLE school.students;  #       
    MariaDB [(none)]> use school
    MariaDB [school]> CALL pro_testtb;  #        
    MariaDB [school]> SELECT COUNT(*) FROM testtb;
    +----------+
    | COUNT(*) |
    +----------+
    |   399997 |
    +----------+
    MariaDB [school]> SELECT * FROM students;  #     students    ,   ?
    ERROR 1146 (42S02): Table 'school.students' doesn't exist
    5)고장 발생
    
    ~]# rm -rf /data/mysqldb/*  #         
    MariaDB [(none)]> show databases;  #         
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    +--------------------+
    6)긴급 복원
    
               :
    ~]# systemctl stop mariadb  #    
    ~]# innobackupex --apply-log --redo-only /backup/2018-06-14_10-44-57/  #         ,                       "--redo-only"  
    ~]# innobackupex --apply-log --redo-only /backup/2018-06-14_10-44-57/ --incremental-dir=/backup/inc1/2018-06-14_10-52-05/  #                   ,          ,"--redo-only"      ,     ,          
    ~]# ls /data/mysqldb/  #             
    ~]# innobackupex --copy-back /backup/2018-06-14_10-44-57/  #      
    ~]# chown -R mysql:mysql /data/mysqldb/  #              
    ~]# vim my.cnf   skip_networking,          
    ~]# systemctl start mariadb  #    ,                  
    
           ,         now   :
    ~]# cat /backup/2018-06-14_10-44-57/xtrabackup_binlog_info  #                
    	mariadb-bin.000011      35740416
    ~]# ls -1 /data/binlog/  #                  
    mariadb-bin.000001
    mariadb-bin.000002
    mariadb-bin.000003
    mariadb-bin.000004
    mariadb-bin.000005
    mariadb-bin.000006
    mariadb-bin.000007
    mariadb-bin.000008
    mariadb-bin.000009
    mariadb-bin.000010
    mariadb-bin.000011
    mariadb-bin.000012
    mariadb-bin.000013
    mariadb-bin.index
    ~]# mysqlbinlog --start-position=35740416 /data/binlog/mariadb-bin.000011 > /backup/binlog.sql  #                       
    ~]# mysqlbinlog /data/binlog/mariadb-bin.000012 >> /backup/binlog.sql
    ~]# mysqlbinlog /data/binlog/mariadb-bin.000013 >> /backup/binlog.sql
       /backup/binlog.sql   ,  "DROP TABLE `school`.`students` /* generated by server */"   ,       
    MariaDB [(none)]> SET sql_log_bin=0;  #              
    MariaDB [(none)]> source /backup/binlog.sql  #             
                   , my.cnf  skip_networking  ,    
                 ~
    5.Xtrabackup 을 사용 하여 단일 테이블 백업 실현
    1)백업 시트
    
    ~]# innobackupex --include="testdb.testlog" /backup  #     
    ~]# mysql -e 'SHOW CREATE TABLE testdb.testlog' > /backup/desc_testdb_testlog.sql  #     
    ~]# mysql -e 'DROP TABLE testdb.testlog'  #    ,  testlog 
    2)복원 표
    
    ~]# innobackupex --apply-log --export /backup/2018-06-14_17-47-02/  #     
    ~]# vim /backup/desc_testdb_testlog.sql  #          ,      
        Table   Create Table
        testlog
    ~]# mysql testdb < /backup/desc_testdb_testlog.sql  #     
    ~]# mysql testdb -e 'DESC testlog'  #        
    +-------+----------+------+-----+---------+----------------+
    | Field | Type     | Null | Key | Default | Extra          |
    +-------+----------+------+-----+---------+----------------+
    | id    | int(11)  | NO   | PRI | NULL    | auto_increment |
    | name  | char(30) | YES  |     | NULL    |                |
    | age   | int(11)  | YES  |     | 20      |                |
    +-------+----------+------+-----+---------+----------------+
    ~]# mysql -e 'ALTER TABLE testdb.testlog DISCARD TABLESPACE'  #     
    ~]# cd /backup/2018-06-14_17-47-02/testdb/
    testdb]# cp testlog.cfg testlog.exp testlog.ibd /var/lib/mysql/testdb/  #          
    ~]# chown -R mysql:mysql /var/lib/mysql/testdb/  #         
    ~]# mysql -e 'ALTER TABLE testdb.testlog IMPORT TABLESPACE'  #     
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기