美文网首页
MySQL备份和恢复

MySQL备份和恢复

作者: 尛尛大尹 | 来源:发表于2017-11-15 20:54 被阅读0次

    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做热备,物理备份工具
    完全备份、部分备份;
    完全备份、增量备份;
    完全备份、差异备份;
    单表导入导出

    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备份和恢复

          本文链接:https://www.haomeiwen.com/subject/jaghvxtx.html