MySQL备份和恢复

1、什么是备份和恢复?

备份:存储的数据副本;
原始数据:持续改变;
恢复:把副本应用到线上系统;
仅能恢复至备份操作时刻的数据状态;
时间点恢复:
binary logs;

为什么备份?

灾难恢复:硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、...
测试;

备份时应该注意事项:

能容忍最多丢失多少数据;
恢复数据需要在多长时间内完成;
需要恢复哪些数据;
做恢复演练:
测试备份的可用性;
增强恢复操作效率;
...

备份类型:
备份的数据集的范围:

完全备份和部分备份
完全备份:整个数据集;
部分备份:数据集的一部分,比如部分表;
全量备份、增量备份、差异备份:
完全备份:备份整个数据集;
增量备份:仅备份自上一次完全备份或增量备份以来变量的那部数据;
差异备份:仅备份自上一次完全备份以来变量的那部数据;

物理备份、逻辑备份:

物理备份:复制数据文件进行的备份;
逻辑备份:从数据库导出数据另存在一个或多个文件中;

根据数据服务是否在线:

热备:读写操作均可进行的状态下所做的备份;
温备:可读但不可写状态下进行的备份;
冷备:读写操作均不可进行的状态下所做的备份;

备份所需要考虑的问题?

锁定资源多长时间?
备份过程的时长?
备份时的服务器负载?
恢复过程的时长?
备份策略:
全量+差异 + binlogs
全量+增量 + binlogs

备份手段:

物理、逻辑

备份什么?

数据
二进制日志、InnoDB的事务日志;
代码(存储过程、存储函数、触发器、事件调度器)
服务器的配置文件

备份工具:

mysqldump:mysql服务自带的备份工具,客户端工具;逻辑备份工具;
https://www.percona.com/
完全、部分备份
InnoDB:热备;
MyISAM:温备;
eg:
# mysqldump -uroot -h172.18.0.67 -pcentos --single-transaction -R --triggers -E --database hidb --master-data=2 --flush-logs > /root/hidb-$(data +%F-%H-%M-%S).sql
cp/tar
lvm2:快照(请求一个全局锁),之后立即释放锁,达到几乎热备的效果;物理备份;
注意:不能仅备份数据文件;要同时备份事务日志;
前提:要求数据文件和事务日志位于同一个逻辑卷;
xtrabackup:
由Percona组织提供,开源工具,支持对InnoDB做热备,物理备份工具
完全备份、部分备份;
完全备份、增量备份;
完全备份、差异备份;
单表导入导出

MySQL备份和恢复_第1张图片
clipboard1.png

mysqlhotcopy
select:
备份:SELECT cluase INTO OUTFILE 'FILENAME';
恢复:CREATE TABLE
导入:LOAD DATA
InnoBase:Innodb --> XtraDB, Innobackup --> Xtrabackup

备份策略:
    xtrabackup:
        全量+差异+binlog
        全量+增量+binlog
    mysqldump:
        全量+binlog
         //binlog用于时间点恢复             

2、mysqldump:

        逻辑备份工具:基于mysql客户端协议
        数据库完全备份、表部分备份;
         mysqldump对InnoDB支持:热备或温备;
           对MyISAM支持:温备;

                 
        二次封装工具:
            mydumper
            phpMyAdmin
            备份机制:
                               库:CREATE  DATABASE
                               表:CREATE  TABLE
                               数据:INSER  TINTO
        Usage: 
            mysqldump [OPTIONS] database [tables]   # 备份单库,可以只备份其中的一部分表(部分备份),要手动创建数据库;
            OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]  # 备份多库,不用创建数据库;
            OR     mysqldump [OPTIONS] --all-databases [OPTIONS] # 备份所有库;
            
        MyISAM存储引擎:支持温备,备份时要锁定表;
            -x, --lock-all-tables:锁定所有库的所有表,读锁,相当于温备;
            -l, --lock-tables:锁定指定库所有表;
            
        InnoDB存储引擎:支持温备和热备;
            --single-transaction:创建一个事务,基于此快照执行备份;
        
        其它选项:
            -R, --routines:备份指定库的存储过程和存储函数;
            --triggers:备份指定库的触发器;
            -E, --events:
             
             --master-data[=#]
                1:记录为CHANGE MASTER TO语句,此语句不被注释;
                2:记录为CHANGE MASTER TO语句,此语句被注释;
                
            --flush-logs:锁定表完成后,即进行日志刷新操作;

完全备份:


clipboard2.png

恢复:#mysql < hidb-2017.sql
#mysql < binlog.sql

3、基于lvm2的备份:

    前提:要求数据文件和事务日志位于同一个逻辑卷;
    
    (1) 请求锁定所有表;
        mysql> FLUSH TABLES WITH READ LOCK;
        
    (2) 记录二进制文件事件位置;
        mysql> FLUSH LOGS;
        mysql> SHOW MASTER STATUS;
        
        mysql  -e  'SHOW MASTER STATUS;' >> /PATH/TO/SOME_POS_FILE
        
    (3) 创建快照卷
        lvcreate  -L # -s -p r - SNAM-NAME /dev/VG-NAME/LV-NAME 
        
    (4) 释放锁
        mysql> UNLOCK TABLES
        
    (5) 挂载快照卷,并执行备份,备份完成后删除快照卷;
    
    (6) 周期性备份二进制日志; 

    
    
Percona:
    InnoDB --> XtraDB (mariadb)
    Innobackup --> Xtrabackup
    
Xtrabackup:
    MyISAM:温备,不支持增量备份;
    InnoDB:热备,增量;
    
    物理备份,速率快、可靠;备份完成后自动校验备份结果集是否可用;还原速度快; 
    
    Usage: [innobackupex [--defaults-file=#] --backup | innobackupex [--defaults-file=#] --prepare] [OPTIONS]
    
        The  innobackupex tool is a Perl script that acts as a wrapper for the xtrabackup C program.
        
    备份 --> 应用日志 --> 还原
        应用日志:--apply-log 
        还原:--copy-back
        
    完全备份:
        
    
    完全+binlog(总结):
        备份:innobackupex  --user  --password=  --host=  /PATH/TO/BACKUP_DIR 
        准备:innobackupex --apply-log  /PATH/TO/BACKUP_DIR 
        恢复:innobackupex --copy-back 
                innodb_log_file_size可能要重新设定;
                
    总结:完全+增量+binlog 
        备份:完全+增量+增量+...
                   完全+差异
        准备:
            innobackupex --apply-log --redo-only BASEDIR 
            innobackupex --apply-log --redo-only BASEDIR  --incremental-dir=INCREMENTAL-DIR
            
        恢复:
            innobackupex --copy-back BASEDIR
            
    备份单库:
        --databases 
    
总结:
    mysqldump+binlog
    lvm2+cp/tar+binlog
    xtrabackup(innodb)+binlog 

    循环复制;
        从服务器的版本号高于主服务器的版本号;

        MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON; 

`

你可能感兴趣的:(MySQL备份和恢复)