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

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; 

`

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容